@aztec/world-state 0.0.0-test.1 → 0.0.1-commit.017a351
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/index.d.ts +1 -1
- package/dest/instrumentation/instrumentation.d.ts +6 -4
- package/dest/instrumentation/instrumentation.d.ts.map +1 -1
- package/dest/instrumentation/instrumentation.js +25 -41
- package/dest/native/bench_metrics.d.ts +23 -0
- package/dest/native/bench_metrics.d.ts.map +1 -0
- package/dest/native/bench_metrics.js +81 -0
- 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/index.d.ts +1 -1
- package/dest/native/ipc_world_state_instance.d.ts +45 -0
- package/dest/native/ipc_world_state_instance.d.ts.map +1 -0
- package/dest/native/ipc_world_state_instance.js +750 -0
- package/dest/native/merkle_trees_facade.d.ts +25 -9
- package/dest/native/merkle_trees_facade.d.ts.map +1 -1
- package/dest/native/merkle_trees_facade.js +109 -25
- package/dest/native/message.d.ts +87 -58
- package/dest/native/message.d.ts.map +1 -1
- package/dest/native/message.js +61 -61
- package/dest/native/native_world_state.d.ts +41 -21
- package/dest/native/native_world_state.d.ts.map +1 -1
- package/dest/native/native_world_state.js +177 -50
- package/dest/native/native_world_state_instance.d.ts +23 -25
- package/dest/native/native_world_state_instance.d.ts.map +1 -1
- package/dest/native/native_world_state_instance.js +8 -163
- package/dest/native/world_state_ops_queue.d.ts +1 -1
- package/dest/native/world_state_ops_queue.d.ts.map +1 -1
- package/dest/native/world_state_ops_queue.js +6 -6
- package/dest/synchronizer/config.d.ts +14 -6
- package/dest/synchronizer/config.d.ts.map +1 -1
- package/dest/synchronizer/config.js +36 -14
- package/dest/synchronizer/errors.d.ts +4 -0
- package/dest/synchronizer/errors.d.ts.map +1 -0
- package/dest/synchronizer/errors.js +5 -0
- package/dest/synchronizer/factory.d.ts +13 -5
- package/dest/synchronizer/factory.d.ts.map +1 -1
- package/dest/synchronizer/factory.js +15 -9
- package/dest/synchronizer/index.d.ts +1 -1
- package/dest/synchronizer/server_world_state_synchronizer.d.ts +21 -31
- package/dest/synchronizer/server_world_state_synchronizer.d.ts.map +1 -1
- package/dest/synchronizer/server_world_state_synchronizer.js +220 -96
- package/dest/test/index.d.ts +1 -1
- package/dest/test/utils.d.ts +12 -5
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +54 -47
- package/dest/testing.d.ts +6 -5
- package/dest/testing.d.ts.map +1 -1
- package/dest/testing.js +15 -15
- package/dest/world-state-db/index.d.ts +1 -1
- package/dest/world-state-db/merkle_tree_db.d.ts +12 -18
- package/dest/world-state-db/merkle_tree_db.d.ts.map +1 -1
- package/package.json +27 -25
- package/src/instrumentation/instrumentation.ts +31 -43
- package/src/native/bench_metrics.ts +91 -0
- package/src/native/fork_checkpoint.ts +19 -3
- package/src/native/ipc_world_state_instance.ts +863 -0
- package/src/native/merkle_trees_facade.ts +127 -33
- package/src/native/message.ts +109 -80
- package/src/native/native_world_state.ts +207 -64
- package/src/native/native_world_state_instance.ts +28 -223
- package/src/native/world_state_ops_queue.ts +6 -6
- package/src/synchronizer/config.ts +58 -20
- package/src/synchronizer/errors.ts +5 -0
- package/src/synchronizer/factory.ts +48 -18
- package/src/synchronizer/server_world_state_synchronizer.ts +249 -121
- package/src/test/utils.ts +92 -82
- package/src/testing.ts +11 -16
- package/src/world-state-db/merkle_tree_db.ts +16 -18
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
3
|
import { type IndexedTreeLeafPreimage, SiblingPath } from '@aztec/foundation/trees';
|
|
4
|
+
import { BlockHash } from '@aztec/stdlib/block';
|
|
5
5
|
import type { BatchInsertionResult, IndexedTreeId, MerkleTreeLeafType, MerkleTreeReadOperations, MerkleTreeWriteOperations, SequentialInsertionResult, TreeInfo } from '@aztec/stdlib/interfaces/server';
|
|
6
6
|
import { MerkleTreeId, NullifierLeaf, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
7
7
|
import { type BlockHeader, StateReference } from '@aztec/stdlib/tx';
|
|
8
|
-
import
|
|
8
|
+
import type { WorldStateRevision } from '@aztec/stdlib/world-state';
|
|
9
|
+
import { type SerializedLeafValue } from './message.js';
|
|
9
10
|
import type { NativeWorldStateInstance } from './native_world_state_instance.js';
|
|
10
11
|
export declare class MerkleTreesFacade implements MerkleTreeReadOperations {
|
|
11
12
|
protected readonly instance: NativeWorldStateInstance;
|
|
@@ -13,7 +14,13 @@ export declare class MerkleTreesFacade implements MerkleTreeReadOperations {
|
|
|
13
14
|
protected readonly revision: WorldStateRevision;
|
|
14
15
|
constructor(instance: NativeWorldStateInstance, initialHeader: BlockHeader, revision: WorldStateRevision);
|
|
15
16
|
getInitialHeader(): BlockHeader;
|
|
17
|
+
getRevision(): WorldStateRevision;
|
|
18
|
+
getSocketPath(): string;
|
|
16
19
|
findLeafIndices(treeId: MerkleTreeId, values: MerkleTreeLeafType<MerkleTreeId>[]): Promise<(bigint | undefined)[]>;
|
|
20
|
+
findSiblingPaths<N extends number>(treeId: MerkleTreeId, values: MerkleTreeLeafType<MerkleTreeId>[]): Promise<({
|
|
21
|
+
path: SiblingPath<N>;
|
|
22
|
+
index: bigint;
|
|
23
|
+
} | undefined)[]>;
|
|
17
24
|
findLeafIndicesAfter(treeId: MerkleTreeId, leaves: MerkleTreeLeafType<MerkleTreeId>[], startIndex: bigint): Promise<(bigint | undefined)[]>;
|
|
18
25
|
getLeafPreimage(treeId: IndexedTreeId, leafIndex: bigint): Promise<IndexedTreeLeafPreimage | undefined>;
|
|
19
26
|
getLeafValue<ID extends MerkleTreeId>(treeId: ID, leafIndex: bigint): Promise<MerkleTreeLeafType<ID> | undefined>;
|
|
@@ -25,18 +32,27 @@ export declare class MerkleTreesFacade implements MerkleTreeReadOperations {
|
|
|
25
32
|
getStateReference(): Promise<StateReference>;
|
|
26
33
|
getInitialStateReference(): Promise<StateReference>;
|
|
27
34
|
getTreeInfo(treeId: MerkleTreeId): Promise<TreeInfo>;
|
|
28
|
-
getBlockNumbersForLeafIndices<ID extends MerkleTreeId>(treeId: ID, leafIndices: bigint[]): Promise<(
|
|
35
|
+
getBlockNumbersForLeafIndices<ID extends MerkleTreeId>(treeId: ID, leafIndices: bigint[]): Promise<(BlockNumber | undefined)[]>;
|
|
29
36
|
}
|
|
30
37
|
export declare class MerkleTreesForkFacade extends MerkleTreesFacade implements MerkleTreeWriteOperations {
|
|
31
|
-
|
|
38
|
+
private opts;
|
|
39
|
+
private log;
|
|
40
|
+
private closePromise;
|
|
41
|
+
constructor(instance: NativeWorldStateInstance, initialHeader: BlockHeader, revision: WorldStateRevision, opts: {
|
|
42
|
+
closeDelayMs?: number;
|
|
43
|
+
});
|
|
32
44
|
updateArchive(header: BlockHeader): Promise<void>;
|
|
33
45
|
appendLeaves<ID extends MerkleTreeId>(treeId: ID, leaves: MerkleTreeLeafType<ID>[]): Promise<void>;
|
|
34
46
|
batchInsert<TreeHeight extends number, SubtreeSiblingPathHeight extends number, ID extends IndexedTreeId>(treeId: ID, rawLeaves: Buffer[], subtreeHeight: number): Promise<BatchInsertionResult<TreeHeight, SubtreeSiblingPathHeight>>;
|
|
35
47
|
sequentialInsert<TreeHeight extends number, ID extends IndexedTreeId>(treeId: ID, rawLeaves: Buffer[]): Promise<SequentialInsertionResult<TreeHeight>>;
|
|
36
48
|
close(): Promise<void>;
|
|
37
|
-
|
|
49
|
+
private doClose;
|
|
50
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
51
|
+
createCheckpoint(): Promise<number>;
|
|
38
52
|
commitCheckpoint(): Promise<void>;
|
|
39
53
|
revertCheckpoint(): Promise<void>;
|
|
54
|
+
commitAllCheckpointsTo(depth: number): Promise<void>;
|
|
55
|
+
revertAllCheckpointsTo(depth: number): Promise<void>;
|
|
40
56
|
}
|
|
41
|
-
export declare function serializeLeaf(leaf: Fr | NullifierLeaf | PublicDataTreeLeaf): SerializedLeafValue;
|
|
42
|
-
//# sourceMappingURL=
|
|
57
|
+
export declare function serializeLeaf(leaf: Fr | BlockHash | NullifierLeaf | PublicDataTreeLeaf): SerializedLeafValue;
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVya2xlX3RyZWVzX2ZhY2FkZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25hdGl2ZS9tZXJrbGVfdHJlZXNfZmFjYWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJcEQsT0FBTyxFQUFFLEtBQUssdUJBQXVCLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxFQUNWLG9CQUFvQixFQUNwQixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLFFBQVEsRUFDVCxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxZQUFZLEVBQ1osYUFBYSxFQUViLGtCQUFrQixFQUVuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxLQUFLLFdBQVcsRUFBeUIsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0YsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUlwRSxPQUFPLEVBRUwsS0FBSyxtQkFBbUIsRUFJekIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVqRixxQkFBYSxpQkFBa0IsWUFBVyx3QkFBd0I7SUFFOUQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsd0JBQXdCO0lBQ3JELFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFdBQVc7SUFDN0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCO0lBSGpELFlBQ3FCLFFBQVEs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merkle_trees_facade.d.ts","sourceRoot":"","sources":["../../src/native/merkle_trees_facade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merkle_trees_facade.d.ts","sourceRoot":"","sources":["../../src/native/merkle_trees_facade.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
var _computedKey;
|
|
2
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
5
|
import { serializeToBuffer } from '@aztec/foundation/serialize';
|
|
6
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
3
7
|
import { SiblingPath } from '@aztec/foundation/trees';
|
|
8
|
+
import { BlockHash } from '@aztec/stdlib/block';
|
|
4
9
|
import { MerkleTreeId, NullifierLeaf, NullifierLeafPreimage, PublicDataTreeLeaf, PublicDataTreeLeafPreimage } from '@aztec/stdlib/trees';
|
|
5
10
|
import { PartialStateReference, StateReference } from '@aztec/stdlib/tx';
|
|
6
11
|
import assert from 'assert';
|
|
@@ -17,9 +22,31 @@ export class MerkleTreesFacade {
|
|
|
17
22
|
getInitialHeader() {
|
|
18
23
|
return this.initialHeader;
|
|
19
24
|
}
|
|
25
|
+
getRevision() {
|
|
26
|
+
return this.revision;
|
|
27
|
+
}
|
|
28
|
+
getSocketPath() {
|
|
29
|
+
return this.instance.getSocketPath();
|
|
30
|
+
}
|
|
20
31
|
findLeafIndices(treeId, values) {
|
|
21
32
|
return this.findLeafIndicesAfter(treeId, values, 0n);
|
|
22
33
|
}
|
|
34
|
+
async findSiblingPaths(treeId, values) {
|
|
35
|
+
const response = await this.instance.call(WorldStateMessageType.FIND_SIBLING_PATHS, {
|
|
36
|
+
leaves: values.map((leaf)=>serializeLeaf(hydrateLeaf(treeId, leaf))),
|
|
37
|
+
revision: this.revision,
|
|
38
|
+
treeId
|
|
39
|
+
});
|
|
40
|
+
return response.paths.map((path)=>{
|
|
41
|
+
if (!path) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
path: new SiblingPath(path.path.length, path.path),
|
|
46
|
+
index: BigInt(path.index)
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
}
|
|
23
50
|
async findLeafIndicesAfter(treeId, leaves, startIndex) {
|
|
24
51
|
const response = await this.instance.call(WorldStateMessageType.FIND_LEAF_INDICES, {
|
|
25
52
|
leaves: leaves.map((leaf)=>serializeLeaf(hydrateLeaf(treeId, leaf))),
|
|
@@ -54,7 +81,7 @@ export class MerkleTreesFacade {
|
|
|
54
81
|
}
|
|
55
82
|
const leaf = deserializeLeafValue(resp);
|
|
56
83
|
if (leaf instanceof Fr) {
|
|
57
|
-
return leaf;
|
|
84
|
+
return treeId === MerkleTreeId.ARCHIVE ? new BlockHash(leaf) : leaf;
|
|
58
85
|
} else {
|
|
59
86
|
return leaf.toBuffer();
|
|
60
87
|
}
|
|
@@ -108,14 +135,18 @@ export class MerkleTreesFacade {
|
|
|
108
135
|
revision: this.revision,
|
|
109
136
|
leafIndices
|
|
110
137
|
});
|
|
111
|
-
return response.blockNumbers.map((x)=>x === undefined || x === null ? undefined :
|
|
138
|
+
return response.blockNumbers.map((x)=>x === undefined || x === null ? undefined : BlockNumber(Number(x)));
|
|
112
139
|
}
|
|
113
140
|
}
|
|
141
|
+
_computedKey = Symbol.asyncDispose;
|
|
114
142
|
export class MerkleTreesForkFacade extends MerkleTreesFacade {
|
|
115
|
-
|
|
143
|
+
opts;
|
|
144
|
+
log;
|
|
145
|
+
closePromise;
|
|
146
|
+
constructor(instance, initialHeader, revision, opts){
|
|
116
147
|
assert.notEqual(revision.forkId, 0, 'Fork ID must be set');
|
|
117
148
|
assert.equal(revision.includeUncommitted, true, 'Fork must include uncommitted data');
|
|
118
|
-
super(instance, initialHeader, revision);
|
|
149
|
+
super(instance, initialHeader, revision), this.opts = opts, this.log = createLogger('world-state:merkle-trees-fork-facade');
|
|
119
150
|
}
|
|
120
151
|
async updateArchive(header) {
|
|
121
152
|
await this.instance.call(WorldStateMessageType.UPDATE_ARCHIVE, {
|
|
@@ -126,7 +157,7 @@ export class MerkleTreesForkFacade extends MerkleTreesFacade {
|
|
|
126
157
|
}
|
|
127
158
|
async appendLeaves(treeId, leaves) {
|
|
128
159
|
await this.instance.call(WorldStateMessageType.APPEND_LEAVES, {
|
|
129
|
-
leaves: leaves.map((leaf)=>leaf),
|
|
160
|
+
leaves: leaves.map((leaf)=>serializeLeaf(hydrateLeaf(treeId, leaf))),
|
|
130
161
|
forkId: this.revision.forkId,
|
|
131
162
|
treeId
|
|
132
163
|
});
|
|
@@ -140,10 +171,10 @@ export class MerkleTreesForkFacade extends MerkleTreesFacade {
|
|
|
140
171
|
subtreeDepth: subtreeHeight
|
|
141
172
|
});
|
|
142
173
|
return {
|
|
143
|
-
newSubtreeSiblingPath: new SiblingPath(resp.
|
|
144
|
-
sortedNewLeaves: resp.
|
|
145
|
-
sortedNewLeavesIndexes: resp.
|
|
146
|
-
lowLeavesWitnessData: resp.
|
|
174
|
+
newSubtreeSiblingPath: new SiblingPath(resp.subtreePath.length, resp.subtreePath),
|
|
175
|
+
sortedNewLeaves: resp.sortedLeaves.map(([leaf])=>leaf).map(deserializeLeafValue).map(serializeToBuffer),
|
|
176
|
+
sortedNewLeavesIndexes: resp.sortedLeaves.map(([, index])=>index),
|
|
177
|
+
lowLeavesWitnessData: resp.lowLeafWitnessData.map((data)=>({
|
|
147
178
|
index: BigInt(data.index),
|
|
148
179
|
leafPreimage: deserializeIndexedLeaf(data.leaf),
|
|
149
180
|
siblingPath: new SiblingPath(data.path.length, data.path)
|
|
@@ -158,29 +189,64 @@ export class MerkleTreesForkFacade extends MerkleTreesFacade {
|
|
|
158
189
|
forkId: this.revision.forkId
|
|
159
190
|
});
|
|
160
191
|
return {
|
|
161
|
-
lowLeavesWitnessData: resp.
|
|
192
|
+
lowLeavesWitnessData: resp.lowLeafWitnessData.map((data)=>({
|
|
162
193
|
index: BigInt(data.index),
|
|
163
194
|
leafPreimage: deserializeIndexedLeaf(data.leaf),
|
|
164
195
|
siblingPath: new SiblingPath(data.path.length, data.path)
|
|
165
196
|
})),
|
|
166
|
-
insertionWitnessData: resp.
|
|
197
|
+
insertionWitnessData: resp.insertionWitnessData.map((data)=>({
|
|
167
198
|
index: BigInt(data.index),
|
|
168
199
|
leafPreimage: deserializeIndexedLeaf(data.leaf),
|
|
169
200
|
siblingPath: new SiblingPath(data.path.length, data.path)
|
|
170
201
|
}))
|
|
171
202
|
};
|
|
172
203
|
}
|
|
173
|
-
|
|
204
|
+
close() {
|
|
174
205
|
assert.notEqual(this.revision.forkId, 0, 'Fork ID must be set');
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
206
|
+
// Share the in-flight close promise across duplicate dispose calls so DELETE_FORK is sent at most once.
|
|
207
|
+
if (this.closePromise) {
|
|
208
|
+
return this.closePromise;
|
|
209
|
+
}
|
|
210
|
+
this.closePromise = this.doClose();
|
|
211
|
+
return this.closePromise;
|
|
212
|
+
}
|
|
213
|
+
async doClose() {
|
|
214
|
+
try {
|
|
215
|
+
await this.instance.call(WorldStateMessageType.DELETE_FORK, {
|
|
216
|
+
forkId: this.revision.forkId
|
|
217
|
+
});
|
|
218
|
+
} catch (err) {
|
|
219
|
+
// Ignore errors due to native instance being closed during shutdown.
|
|
220
|
+
// This can happen when validators are still processing block proposals while the node is stopping.
|
|
221
|
+
if (err?.message === 'Native instance is closed') {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
// Ignore "Fork not found": the native fork was already destroyed by a pending-chain unwind or a
|
|
225
|
+
// historical prune (both call C++ remove_forks_for_block). Fork IDs are monotonic and never reused,
|
|
226
|
+
// so swallowing this on close cannot mask a deletion of a different fork.
|
|
227
|
+
if (err?.message === 'Fork not found') {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
throw err;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
async [_computedKey]() {
|
|
234
|
+
if (this.opts.closeDelayMs) {
|
|
235
|
+
void sleep(this.opts.closeDelayMs).then(()=>this.close()).catch((err)=>{
|
|
236
|
+
this.log.warn('Error closing MerkleTreesForkFacade after delay', {
|
|
237
|
+
err
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
} else {
|
|
241
|
+
await this.close();
|
|
242
|
+
}
|
|
178
243
|
}
|
|
179
244
|
async createCheckpoint() {
|
|
180
245
|
assert.notEqual(this.revision.forkId, 0, 'Fork ID must be set');
|
|
181
|
-
await this.instance.call(WorldStateMessageType.CREATE_CHECKPOINT, {
|
|
246
|
+
const resp = await this.instance.call(WorldStateMessageType.CREATE_CHECKPOINT, {
|
|
182
247
|
forkId: this.revision.forkId
|
|
183
248
|
});
|
|
249
|
+
return resp.depth;
|
|
184
250
|
}
|
|
185
251
|
async commitCheckpoint() {
|
|
186
252
|
assert.notEqual(this.revision.forkId, 0, 'Fork ID must be set');
|
|
@@ -194,10 +260,26 @@ export class MerkleTreesForkFacade extends MerkleTreesFacade {
|
|
|
194
260
|
forkId: this.revision.forkId
|
|
195
261
|
});
|
|
196
262
|
}
|
|
263
|
+
async commitAllCheckpointsTo(depth) {
|
|
264
|
+
assert.notEqual(this.revision.forkId, 0, 'Fork ID must be set');
|
|
265
|
+
await this.instance.call(WorldStateMessageType.COMMIT_ALL_CHECKPOINTS, {
|
|
266
|
+
forkId: this.revision.forkId,
|
|
267
|
+
depth
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
async revertAllCheckpointsTo(depth) {
|
|
271
|
+
assert.notEqual(this.revision.forkId, 0, 'Fork ID must be set');
|
|
272
|
+
await this.instance.call(WorldStateMessageType.REVERT_ALL_CHECKPOINTS, {
|
|
273
|
+
forkId: this.revision.forkId,
|
|
274
|
+
depth
|
|
275
|
+
});
|
|
276
|
+
}
|
|
197
277
|
}
|
|
198
278
|
function hydrateLeaf(treeId, leaf) {
|
|
199
279
|
if (leaf instanceof Fr) {
|
|
200
280
|
return leaf;
|
|
281
|
+
} else if (leaf instanceof BlockHash) {
|
|
282
|
+
return leaf.toFr();
|
|
201
283
|
} else if (treeId === MerkleTreeId.NULLIFIER_TREE) {
|
|
202
284
|
return NullifierLeaf.fromBuffer(leaf);
|
|
203
285
|
} else if (treeId === MerkleTreeId.PUBLIC_DATA_TREE) {
|
|
@@ -207,11 +289,13 @@ function hydrateLeaf(treeId, leaf) {
|
|
|
207
289
|
}
|
|
208
290
|
}
|
|
209
291
|
export function serializeLeaf(leaf) {
|
|
210
|
-
if (leaf instanceof
|
|
292
|
+
if (leaf instanceof BlockHash) {
|
|
293
|
+
return leaf.toBuffer();
|
|
294
|
+
} else if (leaf instanceof Fr) {
|
|
211
295
|
return leaf.toBuffer();
|
|
212
296
|
} else if (leaf instanceof NullifierLeaf) {
|
|
213
297
|
return {
|
|
214
|
-
|
|
298
|
+
nullifier: leaf.nullifier.toBuffer()
|
|
215
299
|
};
|
|
216
300
|
} else {
|
|
217
301
|
return {
|
|
@@ -226,14 +310,14 @@ function deserializeLeafValue(leaf) {
|
|
|
226
310
|
} else if ('slot' in leaf) {
|
|
227
311
|
return new PublicDataTreeLeaf(Fr.fromBuffer(leaf.slot), Fr.fromBuffer(leaf.value));
|
|
228
312
|
} else {
|
|
229
|
-
return new NullifierLeaf(Fr.fromBuffer(leaf.
|
|
313
|
+
return new NullifierLeaf(Fr.fromBuffer(leaf.nullifier));
|
|
230
314
|
}
|
|
231
315
|
}
|
|
232
|
-
function deserializeIndexedLeaf(
|
|
233
|
-
if ('slot' in leaf
|
|
234
|
-
return new PublicDataTreeLeafPreimage(Fr.fromBuffer(leaf.
|
|
235
|
-
} else if ('
|
|
236
|
-
return new NullifierLeafPreimage(Fr.fromBuffer(leaf.
|
|
316
|
+
function deserializeIndexedLeaf(leafPreimage) {
|
|
317
|
+
if ('slot' in leafPreimage.leaf) {
|
|
318
|
+
return new PublicDataTreeLeafPreimage(new PublicDataTreeLeaf(Fr.fromBuffer(leafPreimage.leaf.slot), Fr.fromBuffer(leafPreimage.leaf.value)), Fr.fromBuffer(leafPreimage.nextKey), BigInt(leafPreimage.nextIndex));
|
|
319
|
+
} else if ('nullifier' in leafPreimage.leaf) {
|
|
320
|
+
return new NullifierLeafPreimage(new NullifierLeaf(Fr.fromBuffer(leafPreimage.leaf.nullifier)), Fr.fromBuffer(leafPreimage.nextKey), BigInt(leafPreimage.nextIndex));
|
|
237
321
|
} else {
|
|
238
322
|
throw new Error('Invalid leaf type');
|
|
239
323
|
}
|
package/dest/native/message.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
3
|
import type { Tuple } from '@aztec/foundation/serialize';
|
|
5
4
|
import { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
|
|
6
5
|
import type { StateReference } from '@aztec/stdlib/tx';
|
|
7
6
|
import type { UInt32 } from '@aztec/stdlib/types';
|
|
7
|
+
import type { WorldStateRevision } from '@aztec/stdlib/world-state';
|
|
8
8
|
export declare enum WorldStateMessageType {
|
|
9
9
|
GET_TREE_INFO = 100,
|
|
10
10
|
GET_STATE_REFERENCE = 101,
|
|
@@ -15,22 +15,26 @@ export declare enum WorldStateMessageType {
|
|
|
15
15
|
GET_BLOCK_NUMBERS_FOR_LEAF_INDICES = 106,
|
|
16
16
|
FIND_LEAF_INDICES = 107,
|
|
17
17
|
FIND_LOW_LEAF = 108,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
18
|
+
FIND_SIBLING_PATHS = 109,
|
|
19
|
+
APPEND_LEAVES = 110,
|
|
20
|
+
BATCH_INSERT = 111,
|
|
21
|
+
SEQUENTIAL_INSERT = 112,
|
|
22
|
+
UPDATE_ARCHIVE = 113,
|
|
23
|
+
COMMIT = 114,
|
|
24
|
+
ROLLBACK = 115,
|
|
25
|
+
SYNC_BLOCK = 116,
|
|
26
|
+
CREATE_FORK = 117,
|
|
27
|
+
DELETE_FORK = 118,
|
|
28
|
+
FINALIZE_BLOCKS = 119,
|
|
29
|
+
UNWIND_BLOCKS = 120,
|
|
30
|
+
REMOVE_HISTORICAL_BLOCKS = 121,
|
|
31
|
+
GET_STATUS = 122,
|
|
32
|
+
CREATE_CHECKPOINT = 123,
|
|
33
|
+
COMMIT_CHECKPOINT = 124,
|
|
34
|
+
REVERT_CHECKPOINT = 125,
|
|
35
|
+
COMMIT_ALL_CHECKPOINTS = 126,
|
|
36
|
+
REVERT_ALL_CHECKPOINTS = 127,
|
|
37
|
+
COPY_STORES = 128,
|
|
34
38
|
CLOSE = 999
|
|
35
39
|
}
|
|
36
40
|
interface WithTreeId {
|
|
@@ -38,11 +42,11 @@ interface WithTreeId {
|
|
|
38
42
|
}
|
|
39
43
|
export interface WorldStateStatusSummary {
|
|
40
44
|
/** Last block number that can still be unwound. */
|
|
41
|
-
|
|
42
|
-
/** Last block number that is
|
|
43
|
-
|
|
45
|
+
unfinalizedBlockNumber: BlockNumber;
|
|
46
|
+
/** Last block number that is finalized and cannot be unwound. */
|
|
47
|
+
finalizedBlockNumber: BlockNumber;
|
|
44
48
|
/** Oldest block still available for historical queries and forks. */
|
|
45
|
-
oldestHistoricalBlock:
|
|
49
|
+
oldestHistoricalBlock: BlockNumber;
|
|
46
50
|
/** Whether the trees are in sync with each other */
|
|
47
51
|
treesAreSynched: boolean;
|
|
48
52
|
}
|
|
@@ -62,11 +66,11 @@ export interface TreeMeta {
|
|
|
62
66
|
/** The tree's initial root value */
|
|
63
67
|
initialRoot: Fr;
|
|
64
68
|
/** The current oldest historical block number of the tree */
|
|
65
|
-
oldestHistoricBlock:
|
|
66
|
-
/** The current
|
|
67
|
-
|
|
68
|
-
/** The current
|
|
69
|
-
|
|
69
|
+
oldestHistoricBlock: BlockNumber;
|
|
70
|
+
/** The current unfinalized block number of the tree */
|
|
71
|
+
unfinalizedBlockHeight: BlockNumber;
|
|
72
|
+
/** The current finalized block number of the tree */
|
|
73
|
+
finalizedBlockHeight: BlockNumber;
|
|
70
74
|
}
|
|
71
75
|
export interface DBStats {
|
|
72
76
|
/** The name of the DB */
|
|
@@ -79,6 +83,8 @@ export interface DBStats {
|
|
|
79
83
|
export interface TreeDBStats {
|
|
80
84
|
/** The configured max size of the DB mapping file (effectively the max possible size of the DB) */
|
|
81
85
|
mapSize: bigint;
|
|
86
|
+
/** The physical file size of the database on disk */
|
|
87
|
+
physicalFileSize: bigint;
|
|
82
88
|
/** Stats for the 'blocks' DB */
|
|
83
89
|
blocksDBStats: DBStats;
|
|
84
90
|
/** Stats for the 'nodes' DB */
|
|
@@ -126,16 +132,24 @@ export declare function buildEmptyWorldStateMeta(): WorldStateMeta;
|
|
|
126
132
|
export declare function buildEmptyWorldStateDBStats(): WorldStateDBStats;
|
|
127
133
|
export declare function buildEmptyWorldStateSummary(): WorldStateStatusSummary;
|
|
128
134
|
export declare function buildEmptyWorldStateStatusFull(): WorldStateStatusFull;
|
|
129
|
-
export declare function
|
|
130
|
-
export declare function
|
|
131
|
-
export declare function
|
|
132
|
-
export declare function
|
|
133
|
-
export declare function
|
|
134
|
-
export declare function
|
|
135
|
-
export declare function
|
|
135
|
+
export declare function sanitizeSummary(summary: WorldStateStatusSummary): WorldStateStatusSummary;
|
|
136
|
+
export declare function sanitizeDBStats(stats: DBStats): DBStats;
|
|
137
|
+
export declare function sanitizeMeta(meta: TreeMeta): TreeMeta;
|
|
138
|
+
export declare function sanitizeTreeDBStats(stats: TreeDBStats): TreeDBStats;
|
|
139
|
+
export declare function sanitizeWorldStateDBStats(stats: WorldStateDBStats): WorldStateDBStats;
|
|
140
|
+
export declare function sanitizeWorldStateTreeMeta(meta: WorldStateMeta): WorldStateMeta;
|
|
141
|
+
export declare function sanitizeFullStatus(status: WorldStateStatusFull): WorldStateStatusFull;
|
|
136
142
|
interface WithForkId {
|
|
137
143
|
forkId: number;
|
|
138
144
|
}
|
|
145
|
+
interface CreateCheckpointResponse {
|
|
146
|
+
depth: number;
|
|
147
|
+
}
|
|
148
|
+
/** Request to commit/revert all checkpoints down to a target depth. The resulting depth after the operation equals the given depth. */
|
|
149
|
+
interface CheckpointDepthRequest extends WithForkId {
|
|
150
|
+
/** The target depth after the operation. All checkpoints above this depth are committed/reverted. */
|
|
151
|
+
depth: number;
|
|
152
|
+
}
|
|
139
153
|
interface WithWorldStateRevision {
|
|
140
154
|
revision: WorldStateRevision;
|
|
141
155
|
}
|
|
@@ -146,21 +160,21 @@ interface WithLeafIndex {
|
|
|
146
160
|
leafIndex: bigint;
|
|
147
161
|
}
|
|
148
162
|
export type SerializedLeafValue = Buffer | {
|
|
149
|
-
|
|
163
|
+
nullifier: Buffer;
|
|
150
164
|
} | {
|
|
151
165
|
value: Buffer;
|
|
152
166
|
slot: Buffer;
|
|
153
167
|
};
|
|
154
168
|
export type SerializedIndexedLeaf = {
|
|
155
|
-
|
|
169
|
+
leaf: Exclude<SerializedLeafValue, Buffer>;
|
|
156
170
|
nextIndex: bigint | number;
|
|
157
|
-
|
|
171
|
+
nextKey: Buffer;
|
|
158
172
|
};
|
|
159
173
|
interface WithLeafValues {
|
|
160
174
|
leaves: SerializedLeafValue[];
|
|
161
175
|
}
|
|
162
176
|
interface BlockShiftRequest extends WithCanonicalForkId {
|
|
163
|
-
toBlockNumber:
|
|
177
|
+
toBlockNumber: BlockNumber;
|
|
164
178
|
}
|
|
165
179
|
interface WithLeaves {
|
|
166
180
|
leaves: SerializedLeafValue[];
|
|
@@ -199,6 +213,15 @@ interface FindLeafIndicesRequest extends WithTreeId, WithLeafValues, WithWorldSt
|
|
|
199
213
|
interface FindLeafIndicesResponse {
|
|
200
214
|
indices: bigint[];
|
|
201
215
|
}
|
|
216
|
+
interface FindSiblingPathsRequest extends WithTreeId, WithLeafValues, WithWorldStateRevision {
|
|
217
|
+
}
|
|
218
|
+
interface SiblingPathAndIndex {
|
|
219
|
+
index: bigint;
|
|
220
|
+
path: Buffer[];
|
|
221
|
+
}
|
|
222
|
+
interface FindSiblingPathsResponse {
|
|
223
|
+
paths: (SiblingPathAndIndex | undefined)[];
|
|
224
|
+
}
|
|
202
225
|
interface FindLowLeafRequest extends WithTreeId, WithWorldStateRevision {
|
|
203
226
|
key: Fr;
|
|
204
227
|
}
|
|
@@ -212,23 +235,23 @@ interface BatchInsertRequest extends WithTreeId, WithForkId, WithLeaves {
|
|
|
212
235
|
subtreeDepth: number;
|
|
213
236
|
}
|
|
214
237
|
interface BatchInsertResponse {
|
|
215
|
-
|
|
238
|
+
lowLeafWitnessData: ReadonlyArray<{
|
|
216
239
|
leaf: SerializedIndexedLeaf;
|
|
217
240
|
index: bigint | number;
|
|
218
241
|
path: Tuple<Buffer, number>;
|
|
219
242
|
}>;
|
|
220
|
-
|
|
221
|
-
|
|
243
|
+
sortedLeaves: ReadonlyArray<[SerializedLeafValue, UInt32]>;
|
|
244
|
+
subtreePath: Tuple<Buffer, number>;
|
|
222
245
|
}
|
|
223
246
|
interface SequentialInsertRequest extends WithTreeId, WithForkId, WithLeaves {
|
|
224
247
|
}
|
|
225
248
|
interface SequentialInsertResponse {
|
|
226
|
-
|
|
249
|
+
lowLeafWitnessData: ReadonlyArray<{
|
|
227
250
|
leaf: SerializedIndexedLeaf;
|
|
228
251
|
index: bigint | number;
|
|
229
252
|
path: Tuple<Buffer, number>;
|
|
230
253
|
}>;
|
|
231
|
-
|
|
254
|
+
insertionWitnessData: ReadonlyArray<{
|
|
232
255
|
leaf: SerializedIndexedLeaf;
|
|
233
256
|
index: bigint | number;
|
|
234
257
|
path: Tuple<Buffer, number>;
|
|
@@ -239,9 +262,9 @@ interface UpdateArchiveRequest extends WithForkId {
|
|
|
239
262
|
blockHeaderHash: Buffer;
|
|
240
263
|
}
|
|
241
264
|
interface SyncBlockRequest extends WithCanonicalForkId {
|
|
242
|
-
blockNumber:
|
|
265
|
+
blockNumber: BlockNumber;
|
|
243
266
|
blockStateRef: BlockStateReference;
|
|
244
|
-
blockHeaderHash:
|
|
267
|
+
blockHeaderHash: Buffer;
|
|
245
268
|
paddedNoteHashes: readonly SerializedLeafValue[];
|
|
246
269
|
paddedL1ToL2Messages: readonly SerializedLeafValue[];
|
|
247
270
|
paddedNullifiers: readonly SerializedLeafValue[];
|
|
@@ -249,13 +272,17 @@ interface SyncBlockRequest extends WithCanonicalForkId {
|
|
|
249
272
|
}
|
|
250
273
|
interface CreateForkRequest extends WithCanonicalForkId {
|
|
251
274
|
latest: boolean;
|
|
252
|
-
blockNumber:
|
|
275
|
+
blockNumber: BlockNumber;
|
|
253
276
|
}
|
|
254
277
|
interface CreateForkResponse {
|
|
255
278
|
forkId: number;
|
|
256
279
|
}
|
|
257
280
|
interface DeleteForkRequest extends WithForkId {
|
|
258
281
|
}
|
|
282
|
+
interface CopyStoresRequest extends WithCanonicalForkId {
|
|
283
|
+
dstPath: string;
|
|
284
|
+
compact: boolean;
|
|
285
|
+
}
|
|
259
286
|
export type WorldStateRequestCategories = WithForkId | WithWorldStateRevision | WithCanonicalForkId;
|
|
260
287
|
export declare function isWithForkId(body: WorldStateRequestCategories): body is WithForkId;
|
|
261
288
|
export declare function isWithRevision(body: WorldStateRequestCategories): body is WithWorldStateRevision;
|
|
@@ -270,6 +297,7 @@ export type WorldStateRequest = {
|
|
|
270
297
|
[WorldStateMessageType.GET_BLOCK_NUMBERS_FOR_LEAF_INDICES]: GetBlockNumbersForLeafIndicesRequest;
|
|
271
298
|
[WorldStateMessageType.FIND_LEAF_INDICES]: FindLeafIndicesRequest;
|
|
272
299
|
[WorldStateMessageType.FIND_LOW_LEAF]: FindLowLeafRequest;
|
|
300
|
+
[WorldStateMessageType.FIND_SIBLING_PATHS]: FindSiblingPathsRequest;
|
|
273
301
|
[WorldStateMessageType.APPEND_LEAVES]: AppendLeavesRequest;
|
|
274
302
|
[WorldStateMessageType.BATCH_INSERT]: BatchInsertRequest;
|
|
275
303
|
[WorldStateMessageType.SEQUENTIAL_INSERT]: SequentialInsertRequest;
|
|
@@ -281,11 +309,14 @@ export type WorldStateRequest = {
|
|
|
281
309
|
[WorldStateMessageType.DELETE_FORK]: DeleteForkRequest;
|
|
282
310
|
[WorldStateMessageType.REMOVE_HISTORICAL_BLOCKS]: BlockShiftRequest;
|
|
283
311
|
[WorldStateMessageType.UNWIND_BLOCKS]: BlockShiftRequest;
|
|
284
|
-
[WorldStateMessageType.
|
|
312
|
+
[WorldStateMessageType.FINALIZE_BLOCKS]: BlockShiftRequest;
|
|
285
313
|
[WorldStateMessageType.GET_STATUS]: WithCanonicalForkId;
|
|
286
314
|
[WorldStateMessageType.CREATE_CHECKPOINT]: WithForkId;
|
|
287
315
|
[WorldStateMessageType.COMMIT_CHECKPOINT]: WithForkId;
|
|
288
316
|
[WorldStateMessageType.REVERT_CHECKPOINT]: WithForkId;
|
|
317
|
+
[WorldStateMessageType.COMMIT_ALL_CHECKPOINTS]: CheckpointDepthRequest;
|
|
318
|
+
[WorldStateMessageType.REVERT_ALL_CHECKPOINTS]: CheckpointDepthRequest;
|
|
319
|
+
[WorldStateMessageType.COPY_STORES]: CopyStoresRequest;
|
|
289
320
|
[WorldStateMessageType.CLOSE]: WithCanonicalForkId;
|
|
290
321
|
};
|
|
291
322
|
export type WorldStateResponse = {
|
|
@@ -298,6 +329,7 @@ export type WorldStateResponse = {
|
|
|
298
329
|
[WorldStateMessageType.GET_BLOCK_NUMBERS_FOR_LEAF_INDICES]: GetBlockNumbersForLeafIndicesResponse;
|
|
299
330
|
[WorldStateMessageType.FIND_LEAF_INDICES]: FindLeafIndicesResponse;
|
|
300
331
|
[WorldStateMessageType.FIND_LOW_LEAF]: FindLowLeafResponse;
|
|
332
|
+
[WorldStateMessageType.FIND_SIBLING_PATHS]: FindSiblingPathsResponse;
|
|
301
333
|
[WorldStateMessageType.APPEND_LEAVES]: void;
|
|
302
334
|
[WorldStateMessageType.BATCH_INSERT]: BatchInsertResponse;
|
|
303
335
|
[WorldStateMessageType.SEQUENTIAL_INSERT]: SequentialInsertResponse;
|
|
@@ -309,23 +341,20 @@ export type WorldStateResponse = {
|
|
|
309
341
|
[WorldStateMessageType.DELETE_FORK]: void;
|
|
310
342
|
[WorldStateMessageType.REMOVE_HISTORICAL_BLOCKS]: WorldStateStatusFull;
|
|
311
343
|
[WorldStateMessageType.UNWIND_BLOCKS]: WorldStateStatusFull;
|
|
312
|
-
[WorldStateMessageType.
|
|
344
|
+
[WorldStateMessageType.FINALIZE_BLOCKS]: WorldStateStatusSummary;
|
|
313
345
|
[WorldStateMessageType.GET_STATUS]: WorldStateStatusSummary;
|
|
314
|
-
[WorldStateMessageType.CREATE_CHECKPOINT]:
|
|
346
|
+
[WorldStateMessageType.CREATE_CHECKPOINT]: CreateCheckpointResponse;
|
|
315
347
|
[WorldStateMessageType.COMMIT_CHECKPOINT]: void;
|
|
316
348
|
[WorldStateMessageType.REVERT_CHECKPOINT]: void;
|
|
349
|
+
[WorldStateMessageType.COMMIT_ALL_CHECKPOINTS]: void;
|
|
350
|
+
[WorldStateMessageType.REVERT_ALL_CHECKPOINTS]: void;
|
|
351
|
+
[WorldStateMessageType.COPY_STORES]: void;
|
|
317
352
|
[WorldStateMessageType.CLOSE]: void;
|
|
318
353
|
};
|
|
319
|
-
export type WorldStateRevision = {
|
|
320
|
-
forkId: number;
|
|
321
|
-
blockNumber: number;
|
|
322
|
-
includeUncommitted: boolean;
|
|
323
|
-
};
|
|
324
|
-
export declare function worldStateRevision(includeUncommitted: boolean, forkId: number | undefined, blockNumber: number | undefined): WorldStateRevision;
|
|
325
354
|
type TreeStateReference = readonly [Buffer, number | bigint];
|
|
326
355
|
type BlockStateReference = Map<Exclude<MerkleTreeId, MerkleTreeId.ARCHIVE>, TreeStateReference>;
|
|
327
356
|
export declare function treeStateReferenceToSnapshot([root, size]: TreeStateReference): AppendOnlyTreeSnapshot;
|
|
328
|
-
export declare function treeStateReference(snapshot: AppendOnlyTreeSnapshot): readonly [Buffer
|
|
357
|
+
export declare function treeStateReference(snapshot: AppendOnlyTreeSnapshot): readonly [Buffer<ArrayBufferLike>, bigint];
|
|
329
358
|
export declare function blockStateReference(state: StateReference): BlockStateReference;
|
|
330
359
|
export {};
|
|
331
|
-
//# sourceMappingURL=message.d.ts.map
|
|
360
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25hdGl2ZS9tZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFcEUsb0JBQVkscUJBQXFCO0lBQy9CLGFBQWEsTUFBTTtJQUNuQixtQkFBbUIsTUFBQTtJQUNuQiwyQkFBMkIsTUFBQTtJQUUzQixjQUFjLE1BQUE7SUFDZCxpQkFBaUIsTUFBQTtJQUNqQixnQkFBZ0IsTUFBQTtJQUNoQixrQ0FBa0MsTUFBQTtJQUVsQyxpQkFBaUIsTUFBQTtJQUNqQixhQUFhLE1BQUE7SUFDYixrQkFBa0IsTUFBQTtJQUVsQixhQUFhLE1BQUE7SUFDYixZQUFZLE1BQUE7SUFDWixpQkFBaUIsTUFBQTtJQUVqQixjQUFjLE1BQUE7SUFFZCxNQUFNLE1BQUE7SUFDTixRQUFRLE1BQUE7SUFFUixVQUFVLE1BQUE7SUFFVixXQUFXLE1BQUE7SUFDWCxXQUFXLE1BQUE7SUFFWCxlQUFlLE1BQUE7SUFDZixhQUFhLE1BQUE7SUFDYix3QkFBd0IsTUFBQTtJQUV4QixVQUFVLE1BQUE7SUFFVixpQkFBaUIsTUFBQTtJQUNqQixpQkFBaUIsTUFBQTtJQUNqQixpQkFBaUIsTUFBQTtJQUNq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
|