@aztec/merkle-tree 0.7.10 → 0.8.5
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/standard_indexed_tree/standard_indexed_tree.js +2 -2
- package/package.json +57 -5
- package/src/standard_indexed_tree/standard_indexed_tree.ts +2 -2
- package/.eslintrc.cjs +0 -1
- package/.tsbuildinfo +0 -1
- package/dest/sparse_tree/sparse_tree.test.d.ts +0 -2
- package/dest/sparse_tree/sparse_tree.test.d.ts.map +0 -1
- package/dest/sparse_tree/sparse_tree.test.js +0 -133
- package/dest/standard_indexed_tree/test/standard_indexed_tree.test.d.ts +0 -2
- package/dest/standard_indexed_tree/test/standard_indexed_tree.test.d.ts.map +0 -1
- package/dest/standard_indexed_tree/test/standard_indexed_tree.test.js +0 -336
- package/dest/standard_tree/standard_tree.test.d.ts +0 -2
- package/dest/standard_tree/standard_tree.test.d.ts.map +0 -1
- package/dest/standard_tree/standard_tree.test.js +0 -58
- package/dest/test/standard_based_test_suite.d.ts +0 -6
- package/dest/test/standard_based_test_suite.d.ts.map +0 -1
- package/dest/test/standard_based_test_suite.js +0 -87
- package/dest/test/test_suite.d.ts +0 -6
- package/dest/test/test_suite.d.ts.map +0 -1
- package/dest/test/test_suite.js +0 -119
- package/dest/test/utils/append_leaves.d.ts +0 -5
- package/dest/test/utils/append_leaves.d.ts.map +0 -1
- package/dest/test/utils/append_leaves.js +0 -14
- package/dest/test/utils/create_mem_down.d.ts +0 -3
- package/dest/test/utils/create_mem_down.d.ts.map +0 -1
- package/dest/test/utils/create_mem_down.js +0 -3
- package/dest/test/utils/pedersen_with_counter.d.ts +0 -24
- package/dest/test/utils/pedersen_with_counter.d.ts.map +0 -1
- package/dest/test/utils/pedersen_with_counter.js +0 -31
- package/package.local.json +0 -3
- package/src/sparse_tree/sparse_tree.test.ts +0 -179
- package/src/standard_indexed_tree/test/standard_indexed_tree.test.ts +0 -476
- package/src/standard_tree/standard_tree.test.ts +0 -76
- package/src/test/standard_based_test_suite.ts +0 -142
- package/src/test/test_suite.ts +0 -165
- package/src/test/utils/append_leaves.ts +0 -15
- package/src/test/utils/create_mem_down.ts +0 -3
- package/src/test/utils/pedersen_with_counter.ts +0 -30
- package/tsconfig.json +0 -20
|
@@ -1,336 +0,0 @@
|
|
|
1
|
-
import { CircuitsWasm } from '@aztec/circuits.js';
|
|
2
|
-
import { toBufferBE } from '@aztec/foundation/bigint-buffer';
|
|
3
|
-
import { SiblingPath } from '@aztec/types';
|
|
4
|
-
import { default as levelup } from 'levelup';
|
|
5
|
-
import { INITIAL_LEAF, Pedersen, loadTree, newTree } from '../../index.js';
|
|
6
|
-
import { treeTestSuite } from '../../test/test_suite.js';
|
|
7
|
-
import { createMemDown } from '../../test/utils/create_mem_down.js';
|
|
8
|
-
import { StandardIndexedTreeWithAppend } from './standard_indexed_tree_with_append.js';
|
|
9
|
-
const createDb = async (levelUp, hasher, name, depth, prefilledSize = 1) => {
|
|
10
|
-
return await newTree(StandardIndexedTreeWithAppend, levelUp, hasher, name, depth, prefilledSize);
|
|
11
|
-
};
|
|
12
|
-
const createFromName = async (levelUp, hasher, name) => {
|
|
13
|
-
return await loadTree(StandardIndexedTreeWithAppend, levelUp, hasher, name);
|
|
14
|
-
};
|
|
15
|
-
const createIndexedTreeLeaf = (value, nextIndex, nextValue) => {
|
|
16
|
-
return [toBufferBE(BigInt(value), 32), toBufferBE(BigInt(nextIndex), 32), toBufferBE(BigInt(nextValue), 32)];
|
|
17
|
-
};
|
|
18
|
-
const verifyCommittedState = async (tree, root, siblingPathIndex, emptySiblingPath) => {
|
|
19
|
-
expect(tree.getRoot(false)).toEqual(root);
|
|
20
|
-
expect(tree.getNumLeaves(false)).toEqual(1n);
|
|
21
|
-
expect(await tree.getSiblingPath(siblingPathIndex, false)).toEqual(emptySiblingPath);
|
|
22
|
-
};
|
|
23
|
-
const TEST_TREE_DEPTH = 3;
|
|
24
|
-
treeTestSuite('StandardIndexedTree', createDb, createFromName);
|
|
25
|
-
describe('StandardIndexedTreeSpecific', () => {
|
|
26
|
-
let wasm;
|
|
27
|
-
let pedersen;
|
|
28
|
-
beforeEach(async () => {
|
|
29
|
-
wasm = await CircuitsWasm.get();
|
|
30
|
-
pedersen = new Pedersen(wasm);
|
|
31
|
-
});
|
|
32
|
-
it('produces the correct roots and sibling paths', async () => {
|
|
33
|
-
// Create a depth-3 indexed merkle tree
|
|
34
|
-
const db = levelup(createMemDown());
|
|
35
|
-
const tree = await createDb(db, pedersen, 'test', 3);
|
|
36
|
-
/**
|
|
37
|
-
* Initial state:
|
|
38
|
-
*
|
|
39
|
-
* index 0 1 2 3 4 5 6 7
|
|
40
|
-
* ---------------------------------------------------------------------
|
|
41
|
-
* val 0 0 0 0 0 0 0 0
|
|
42
|
-
* nextIdx 0 0 0 0 0 0 0 0
|
|
43
|
-
* nextVal 0 0 0 0 0 0 0 0.
|
|
44
|
-
*/
|
|
45
|
-
const initialLeafHash = pedersen.compressInputs(createIndexedTreeLeaf(0, 0, 0));
|
|
46
|
-
const level1ZeroHash = pedersen.compress(INITIAL_LEAF, INITIAL_LEAF);
|
|
47
|
-
const level2ZeroHash = pedersen.compress(level1ZeroHash, level1ZeroHash);
|
|
48
|
-
let index0Hash = initialLeafHash;
|
|
49
|
-
// Each element is named by the level followed by the index on that level. E.g. e10 -> level 1, index 0, e21 -> level 2, index 1
|
|
50
|
-
let e10 = pedersen.compress(index0Hash, INITIAL_LEAF);
|
|
51
|
-
let e20 = pedersen.compress(e10, level1ZeroHash);
|
|
52
|
-
const initialE20 = e20; // Kept for calculating committed state later
|
|
53
|
-
const initialE10 = e10;
|
|
54
|
-
let root = pedersen.compress(e20, level2ZeroHash);
|
|
55
|
-
const initialRoot = root;
|
|
56
|
-
const emptySiblingPath = new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash, level2ZeroHash]);
|
|
57
|
-
expect(tree.getRoot(true)).toEqual(root);
|
|
58
|
-
expect(tree.getNumLeaves(true)).toEqual(1n);
|
|
59
|
-
expect(await tree.getSiblingPath(0n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash, level2ZeroHash]));
|
|
60
|
-
await verifyCommittedState(tree, initialRoot, 0n, emptySiblingPath);
|
|
61
|
-
/**
|
|
62
|
-
* Add new value 30:
|
|
63
|
-
*
|
|
64
|
-
* index 0 1 2 3 4 5 6 7
|
|
65
|
-
* ---------------------------------------------------------------------
|
|
66
|
-
* val 0 30 0 0 0 0 0 0
|
|
67
|
-
* nextIdx 1 0 0 0 0 0 0 0
|
|
68
|
-
* nextVal 30 0 0 0 0 0 0 0.
|
|
69
|
-
*/
|
|
70
|
-
index0Hash = pedersen.compressInputs(createIndexedTreeLeaf(0, 1, 30));
|
|
71
|
-
let index1Hash = pedersen.compressInputs(createIndexedTreeLeaf(30, 0, 0));
|
|
72
|
-
e10 = pedersen.compress(index0Hash, index1Hash);
|
|
73
|
-
e20 = pedersen.compress(e10, level1ZeroHash);
|
|
74
|
-
root = pedersen.compress(e20, level2ZeroHash);
|
|
75
|
-
await tree.appendLeaves([toBufferBE(30n, 32)]);
|
|
76
|
-
expect(tree.getRoot(true)).toEqual(root);
|
|
77
|
-
expect(tree.getNumLeaves(true)).toEqual(2n);
|
|
78
|
-
expect(await tree.getSiblingPath(1n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [index0Hash, level1ZeroHash, level2ZeroHash]));
|
|
79
|
-
// ensure the committed state is correct
|
|
80
|
-
const initialSiblingPath = new SiblingPath(TEST_TREE_DEPTH, [initialLeafHash, level1ZeroHash, level2ZeroHash]);
|
|
81
|
-
await verifyCommittedState(tree, initialRoot, 1n, initialSiblingPath);
|
|
82
|
-
/**
|
|
83
|
-
* Add new value 10:
|
|
84
|
-
*
|
|
85
|
-
* index 0 1 2 3 4 5 6 7
|
|
86
|
-
* ---------------------------------------------------------------------
|
|
87
|
-
* val 0 30 10 0 0 0 0 0
|
|
88
|
-
* nextIdx 2 0 1 0 0 0 0 0
|
|
89
|
-
* nextVal 10 0 30 0 0 0 0 0.
|
|
90
|
-
*/
|
|
91
|
-
index0Hash = pedersen.compressInputs(createIndexedTreeLeaf(0, 2, 10));
|
|
92
|
-
let index2Hash = pedersen.compressInputs(createIndexedTreeLeaf(10, 1, 30));
|
|
93
|
-
e10 = pedersen.compress(index0Hash, index1Hash);
|
|
94
|
-
let e11 = pedersen.compress(index2Hash, INITIAL_LEAF);
|
|
95
|
-
e20 = pedersen.compress(e10, e11);
|
|
96
|
-
root = pedersen.compress(e20, level2ZeroHash);
|
|
97
|
-
await tree.appendLeaves([toBufferBE(10n, 32)]);
|
|
98
|
-
expect(tree.getRoot(true)).toEqual(root);
|
|
99
|
-
expect(tree.getNumLeaves(true)).toEqual(3n);
|
|
100
|
-
expect(await tree.getSiblingPath(2n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, e10, level2ZeroHash]));
|
|
101
|
-
// ensure the committed state is correct
|
|
102
|
-
await verifyCommittedState(tree, initialRoot, 2n, new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, initialE10, level2ZeroHash]));
|
|
103
|
-
/**
|
|
104
|
-
* Add new value 20:
|
|
105
|
-
*
|
|
106
|
-
* index 0 1 2 3 4 5 6 7
|
|
107
|
-
* ---------------------------------------------------------------------
|
|
108
|
-
* val 0 30 10 20 0 0 0 0
|
|
109
|
-
* nextIdx 2 0 3 1 0 0 0 0
|
|
110
|
-
* nextVal 10 0 20 30 0 0 0 0.
|
|
111
|
-
*/
|
|
112
|
-
e10 = pedersen.compress(index0Hash, index1Hash);
|
|
113
|
-
index2Hash = pedersen.compressInputs(createIndexedTreeLeaf(10, 3, 20));
|
|
114
|
-
const index3Hash = pedersen.compressInputs(createIndexedTreeLeaf(20, 1, 30));
|
|
115
|
-
e11 = pedersen.compress(index2Hash, index3Hash);
|
|
116
|
-
e20 = pedersen.compress(e10, e11);
|
|
117
|
-
root = pedersen.compress(e20, level2ZeroHash);
|
|
118
|
-
await tree.appendLeaves([toBufferBE(20n, 32)]);
|
|
119
|
-
expect(tree.getRoot(true)).toEqual(root);
|
|
120
|
-
expect(tree.getNumLeaves(true)).toEqual(4n);
|
|
121
|
-
expect(await tree.getSiblingPath(3n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [index2Hash, e10, level2ZeroHash]));
|
|
122
|
-
// ensure the committed state is correct
|
|
123
|
-
await verifyCommittedState(tree, initialRoot, 3n, new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, initialE10, level2ZeroHash]));
|
|
124
|
-
/**
|
|
125
|
-
* Add new value 50:
|
|
126
|
-
*
|
|
127
|
-
* index 0 1 2 3 4 5 6 7
|
|
128
|
-
* ---------------------------------------------------------------------
|
|
129
|
-
* val 0 30 10 20 50 0 0 0
|
|
130
|
-
* nextIdx 2 4 3 1 0 0 0 0
|
|
131
|
-
* nextVal 10 50 20 30 0 0 0 0.
|
|
132
|
-
*/
|
|
133
|
-
index1Hash = pedersen.compressInputs(createIndexedTreeLeaf(30, 4, 50));
|
|
134
|
-
const index4Hash = pedersen.compressInputs(createIndexedTreeLeaf(50, 0, 0));
|
|
135
|
-
e10 = pedersen.compress(index0Hash, index1Hash);
|
|
136
|
-
e20 = pedersen.compress(e10, e11);
|
|
137
|
-
const e12 = pedersen.compress(index4Hash, INITIAL_LEAF);
|
|
138
|
-
const e21 = pedersen.compress(e12, level1ZeroHash);
|
|
139
|
-
root = pedersen.compress(e20, e21);
|
|
140
|
-
await tree.appendLeaves([toBufferBE(50n, 32)]);
|
|
141
|
-
expect(tree.getRoot(true)).toEqual(root);
|
|
142
|
-
expect(tree.getNumLeaves(true)).toEqual(5n);
|
|
143
|
-
// ensure the committed state is correct
|
|
144
|
-
await verifyCommittedState(tree, initialRoot, 4n, new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash, initialE20]));
|
|
145
|
-
// check all uncommitted hash paths
|
|
146
|
-
expect(await tree.getSiblingPath(0n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [index1Hash, e11, e21]));
|
|
147
|
-
expect(await tree.getSiblingPath(1n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [index0Hash, e11, e21]));
|
|
148
|
-
expect(await tree.getSiblingPath(2n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [index3Hash, e10, e21]));
|
|
149
|
-
expect(await tree.getSiblingPath(3n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [index2Hash, e10, e21]));
|
|
150
|
-
expect(await tree.getSiblingPath(4n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash, e20]));
|
|
151
|
-
expect(await tree.getSiblingPath(5n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [index4Hash, level1ZeroHash, e20]));
|
|
152
|
-
expect(await tree.getSiblingPath(6n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, e12, e20]));
|
|
153
|
-
expect(await tree.getSiblingPath(7n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, e12, e20]));
|
|
154
|
-
// check all committed hash paths
|
|
155
|
-
expect(await tree.getSiblingPath(0n, false)).toEqual(emptySiblingPath);
|
|
156
|
-
expect(await tree.getSiblingPath(1n, false)).toEqual(initialSiblingPath);
|
|
157
|
-
expect(await tree.getSiblingPath(2n, false)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, initialE10, level2ZeroHash]));
|
|
158
|
-
expect(await tree.getSiblingPath(3n, false)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, initialE10, level2ZeroHash]));
|
|
159
|
-
const e2SiblingPath = new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash, initialE20]);
|
|
160
|
-
expect(await tree.getSiblingPath(4n, false)).toEqual(e2SiblingPath);
|
|
161
|
-
expect(await tree.getSiblingPath(5n, false)).toEqual(e2SiblingPath);
|
|
162
|
-
expect(await tree.getSiblingPath(6n, false)).toEqual(e2SiblingPath);
|
|
163
|
-
expect(await tree.getSiblingPath(7n, false)).toEqual(e2SiblingPath);
|
|
164
|
-
await tree.commit();
|
|
165
|
-
// check all committed hash paths equal uncommitted hash paths
|
|
166
|
-
for (let i = 0; i < 8; i++) {
|
|
167
|
-
expect(await tree.getSiblingPath(BigInt(i), false)).toEqual(await tree.getSiblingPath(BigInt(i), true));
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
it('Can append empty leaves and handle insertions', async () => {
|
|
171
|
-
// Create a depth-3 indexed merkle tree
|
|
172
|
-
const db = levelup(createMemDown());
|
|
173
|
-
const tree = await createDb(db, pedersen, 'test', 3);
|
|
174
|
-
/**
|
|
175
|
-
* Initial state:
|
|
176
|
-
*
|
|
177
|
-
* index 0 1 2 3 4 5 6 7
|
|
178
|
-
* ---------------------------------------------------------------------
|
|
179
|
-
* val 0 0 0 0 0 0 0 0
|
|
180
|
-
* nextIdx 0 0 0 0 0 0 0 0
|
|
181
|
-
* nextVal 0 0 0 0 0 0 0 0.
|
|
182
|
-
*/
|
|
183
|
-
const INITIAL_LEAF = toBufferBE(0n, 32);
|
|
184
|
-
const initialLeafHash = pedersen.compressInputs(createIndexedTreeLeaf(0, 0, 0));
|
|
185
|
-
const level1ZeroHash = pedersen.compress(INITIAL_LEAF, INITIAL_LEAF);
|
|
186
|
-
const level2ZeroHash = pedersen.compress(level1ZeroHash, level1ZeroHash);
|
|
187
|
-
let index0Hash = initialLeafHash;
|
|
188
|
-
let e10 = pedersen.compress(index0Hash, INITIAL_LEAF);
|
|
189
|
-
let e20 = pedersen.compress(e10, level1ZeroHash);
|
|
190
|
-
const inite10 = e10;
|
|
191
|
-
const inite20 = e20;
|
|
192
|
-
let root = pedersen.compress(e20, level2ZeroHash);
|
|
193
|
-
const initialRoot = root;
|
|
194
|
-
const emptySiblingPath = new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash, level2ZeroHash]);
|
|
195
|
-
const initialSiblingPath = new SiblingPath(TEST_TREE_DEPTH, [initialLeafHash, level1ZeroHash, level2ZeroHash]);
|
|
196
|
-
expect(tree.getRoot(true)).toEqual(root);
|
|
197
|
-
expect(tree.getNumLeaves(true)).toEqual(1n);
|
|
198
|
-
expect(await tree.getSiblingPath(0n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash, level2ZeroHash]));
|
|
199
|
-
await verifyCommittedState(tree, initialRoot, 0n, emptySiblingPath);
|
|
200
|
-
/**
|
|
201
|
-
* Add new value 30:
|
|
202
|
-
*
|
|
203
|
-
* index 0 1 2 3 4 5 6 7
|
|
204
|
-
* ---------------------------------------------------------------------
|
|
205
|
-
* val 0 30 0 0 0 0 0 0
|
|
206
|
-
* nextIdx 1 0 0 0 0 0 0 0
|
|
207
|
-
* nextVal 30 0 0 0 0 0 0 0.
|
|
208
|
-
*/
|
|
209
|
-
index0Hash = pedersen.compressInputs(createIndexedTreeLeaf(0, 1, 30));
|
|
210
|
-
let index1Hash = pedersen.compressInputs(createIndexedTreeLeaf(30, 0, 0));
|
|
211
|
-
e10 = pedersen.compress(index0Hash, index1Hash);
|
|
212
|
-
e20 = pedersen.compress(e10, level1ZeroHash);
|
|
213
|
-
root = pedersen.compress(e20, level2ZeroHash);
|
|
214
|
-
await tree.appendLeaves([toBufferBE(30n, 32)]);
|
|
215
|
-
expect(tree.getRoot(true)).toEqual(root);
|
|
216
|
-
expect(tree.getNumLeaves(true)).toEqual(2n);
|
|
217
|
-
expect(await tree.getSiblingPath(1n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [index0Hash, level1ZeroHash, level2ZeroHash]));
|
|
218
|
-
// ensure the committed state is correct
|
|
219
|
-
await verifyCommittedState(tree, initialRoot, 1n, initialSiblingPath);
|
|
220
|
-
/**
|
|
221
|
-
* Add new value 10:
|
|
222
|
-
*
|
|
223
|
-
* index 0 1 2 3 4 5 6 7
|
|
224
|
-
* ---------------------------------------------------------------------
|
|
225
|
-
* val 0 30 10 0 0 0 0 0
|
|
226
|
-
* nextIdx 2 0 1 0 0 0 0 0
|
|
227
|
-
* nextVal 10 0 30 0 0 0 0 0.
|
|
228
|
-
*/
|
|
229
|
-
index0Hash = pedersen.compressInputs(createIndexedTreeLeaf(0, 2, 10));
|
|
230
|
-
let index2Hash = pedersen.compressInputs(createIndexedTreeLeaf(10, 1, 30));
|
|
231
|
-
e10 = pedersen.compress(index0Hash, index1Hash);
|
|
232
|
-
let e11 = pedersen.compress(index2Hash, INITIAL_LEAF);
|
|
233
|
-
e20 = pedersen.compress(e10, e11);
|
|
234
|
-
root = pedersen.compress(e20, level2ZeroHash);
|
|
235
|
-
await tree.appendLeaves([toBufferBE(10n, 32)]);
|
|
236
|
-
expect(tree.getRoot(true)).toEqual(root);
|
|
237
|
-
expect(tree.getNumLeaves(true)).toEqual(3n);
|
|
238
|
-
expect(await tree.getSiblingPath(2n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, e10, level2ZeroHash]));
|
|
239
|
-
// ensure the committed state is correct
|
|
240
|
-
await verifyCommittedState(tree, initialRoot, 2n, new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, inite10, level2ZeroHash]));
|
|
241
|
-
/**
|
|
242
|
-
* Add new value 20:
|
|
243
|
-
*
|
|
244
|
-
* index 0 1 2 3 4 5 6 7
|
|
245
|
-
* ---------------------------------------------------------------------
|
|
246
|
-
* val 0 30 10 20 0 0 0 0
|
|
247
|
-
* nextIdx 2 0 3 1 0 0 0 0
|
|
248
|
-
* nextVal 10 0 20 30 0 0 0 0.
|
|
249
|
-
*/
|
|
250
|
-
e10 = pedersen.compress(index0Hash, index1Hash);
|
|
251
|
-
index2Hash = pedersen.compressInputs(createIndexedTreeLeaf(10, 3, 20));
|
|
252
|
-
const index3Hash = pedersen.compressInputs(createIndexedTreeLeaf(20, 1, 30));
|
|
253
|
-
e11 = pedersen.compress(index2Hash, index3Hash);
|
|
254
|
-
e20 = pedersen.compress(e10, e11);
|
|
255
|
-
root = pedersen.compress(e20, level2ZeroHash);
|
|
256
|
-
await tree.appendLeaves([toBufferBE(20n, 32)]);
|
|
257
|
-
expect(tree.getRoot(true)).toEqual(root);
|
|
258
|
-
expect(tree.getNumLeaves(true)).toEqual(4n);
|
|
259
|
-
expect(await tree.getSiblingPath(3n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [index2Hash, e10, level2ZeroHash]));
|
|
260
|
-
// ensure the committed state is correct
|
|
261
|
-
await verifyCommittedState(tree, initialRoot, 3n, new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, inite10, level2ZeroHash]));
|
|
262
|
-
// Add 2 empty values
|
|
263
|
-
const emptyLeaves = [toBufferBE(0n, 32), toBufferBE(0n, 32)];
|
|
264
|
-
await tree.appendLeaves(emptyLeaves);
|
|
265
|
-
// The root should be the same but the size should have increased
|
|
266
|
-
expect(tree.getRoot(true)).toEqual(root);
|
|
267
|
-
expect(tree.getNumLeaves(true)).toEqual(6n);
|
|
268
|
-
/**
|
|
269
|
-
* Add new value 50:
|
|
270
|
-
*
|
|
271
|
-
* index 0 1 2 3 4 5 6 7
|
|
272
|
-
* --------------------------------------------------------------------
|
|
273
|
-
* val 0 30 10 20 0 0 50 0
|
|
274
|
-
* nextIdx 2 6 3 1 0 0 0 0
|
|
275
|
-
* nextVal 10 50 20 30 0 0 0 0.
|
|
276
|
-
*/
|
|
277
|
-
index1Hash = pedersen.compressInputs(createIndexedTreeLeaf(30, 6, 50));
|
|
278
|
-
const index6Hash = pedersen.compressInputs(createIndexedTreeLeaf(50, 0, 0));
|
|
279
|
-
e10 = pedersen.compress(index0Hash, index1Hash);
|
|
280
|
-
e20 = pedersen.compress(e10, e11);
|
|
281
|
-
const e13 = pedersen.compress(index6Hash, INITIAL_LEAF);
|
|
282
|
-
const e21 = pedersen.compress(level1ZeroHash, e13);
|
|
283
|
-
root = pedersen.compress(e20, e21);
|
|
284
|
-
await tree.appendLeaves([toBufferBE(50n, 32)]);
|
|
285
|
-
expect(tree.getRoot(true)).toEqual(root);
|
|
286
|
-
expect(tree.getNumLeaves(true)).toEqual(7n);
|
|
287
|
-
// ensure the committed state is correct
|
|
288
|
-
await verifyCommittedState(tree, initialRoot, 6n, new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash, inite20]));
|
|
289
|
-
// // check all uncommitted hash paths
|
|
290
|
-
expect(await tree.getSiblingPath(0n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [index1Hash, e11, e21]));
|
|
291
|
-
expect(await tree.getSiblingPath(1n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [index0Hash, e11, e21]));
|
|
292
|
-
expect(await tree.getSiblingPath(2n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [index3Hash, e10, e21]));
|
|
293
|
-
expect(await tree.getSiblingPath(3n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [index2Hash, e10, e21]));
|
|
294
|
-
expect(await tree.getSiblingPath(4n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, e13, e20]));
|
|
295
|
-
expect(await tree.getSiblingPath(5n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, e13, e20]));
|
|
296
|
-
expect(await tree.getSiblingPath(6n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash, e20]));
|
|
297
|
-
expect(await tree.getSiblingPath(7n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [index6Hash, level1ZeroHash, e20]));
|
|
298
|
-
// check all committed hash paths
|
|
299
|
-
expect(await tree.getSiblingPath(0n, false)).toEqual(emptySiblingPath);
|
|
300
|
-
expect(await tree.getSiblingPath(1n, false)).toEqual(initialSiblingPath);
|
|
301
|
-
expect(await tree.getSiblingPath(2n, false)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, inite10, level2ZeroHash]));
|
|
302
|
-
expect(await tree.getSiblingPath(3n, false)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, inite10, level2ZeroHash]));
|
|
303
|
-
const e2SiblingPath = new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash, inite20]);
|
|
304
|
-
expect(await tree.getSiblingPath(4n, false)).toEqual(e2SiblingPath);
|
|
305
|
-
expect(await tree.getSiblingPath(5n, false)).toEqual(e2SiblingPath);
|
|
306
|
-
expect(await tree.getSiblingPath(6n, false)).toEqual(e2SiblingPath);
|
|
307
|
-
expect(await tree.getSiblingPath(7n, false)).toEqual(e2SiblingPath);
|
|
308
|
-
await tree.commit();
|
|
309
|
-
// check all committed hash paths equal uncommitted hash paths
|
|
310
|
-
for (let i = 0; i < 8; i++) {
|
|
311
|
-
expect(await tree.getSiblingPath(BigInt(i), false)).toEqual(await tree.getSiblingPath(BigInt(i), true));
|
|
312
|
-
}
|
|
313
|
-
});
|
|
314
|
-
// For varying orders of insertions assert the local batch insertion generator creates the correct proofs
|
|
315
|
-
it.each([
|
|
316
|
-
// These are arbitrary but it needs to be higher than the constant `INITIAL_NULLIFIER_TREE_SIZE` and `KERNEL_NEW_NULLIFIERS_LENGTH * 2`
|
|
317
|
-
[[1003, 1002, 1001, 1000, 0, 0, 0, 0]],
|
|
318
|
-
[[1003, 1004, 1005, 1006, 0, 0, 0, 0]],
|
|
319
|
-
[[1234, 1098, 0, 0, 99999, 1096, 1054, 0]],
|
|
320
|
-
[[1970, 1980, 1040, 0, 99999, 1880, 100001, 9000000]],
|
|
321
|
-
])('performs nullifier tree batch insertion correctly', async (nullifiers) => {
|
|
322
|
-
const leaves = nullifiers.map(i => toBufferBE(BigInt(i), 32));
|
|
323
|
-
const TREE_HEIGHT = 16; // originally from NULLIFIER_TREE_HEIGHT
|
|
324
|
-
const INITIAL_TREE_SIZE = 8; // originally from INITIAL_NULLIFIER_TREE_SIZE
|
|
325
|
-
const SUBTREE_HEIGHT = 5; // originally from BaseRollupInputs.NULLIFIER_SUBTREE_HEIGHT
|
|
326
|
-
// Create a depth-3 indexed merkle tree
|
|
327
|
-
const appendTree = await createDb(levelup(createMemDown()), pedersen, 'test', TREE_HEIGHT, INITIAL_TREE_SIZE);
|
|
328
|
-
const insertTree = await createDb(levelup(createMemDown()), pedersen, 'test', TREE_HEIGHT, INITIAL_TREE_SIZE);
|
|
329
|
-
await appendTree.appendLeaves(leaves);
|
|
330
|
-
await insertTree.batchInsert(leaves, SUBTREE_HEIGHT);
|
|
331
|
-
const expectedRoot = appendTree.getRoot(true);
|
|
332
|
-
const actualRoot = insertTree.getRoot(true);
|
|
333
|
-
expect(actualRoot).toEqual(expectedRoot);
|
|
334
|
-
});
|
|
335
|
-
});
|
|
336
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRfaW5kZXhlZF90cmVlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RhbmRhcmRfaW5kZXhlZF90cmVlL3Rlc3Qvc3RhbmRhcmRfaW5kZXhlZF90cmVlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU3RCxPQUFPLEVBQVUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRW5ELE9BQU8sRUFBRSxPQUFPLElBQUksT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTdDLE9BQU8sRUFBRSxZQUFZLEVBQWMsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXZGLE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxPQUF3QixFQUFFLE1BQWMsRUFBRSxJQUFZLEVBQUUsS0FBYSxFQUFFLGFBQWEsR0FBRyxDQUFDLEVBQUUsRUFBRTtJQUNsSCxPQUFPLE1BQU0sT0FBTyxDQUFDLDZCQUE2QixFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNuRyxDQUFDLENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQUUsT0FBd0IsRUFBRSxNQUFjLEVBQUUsSUFBWSxFQUFFLEVBQUU7SUFDdEYsT0FBTyxNQUFNLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzlFLENBQUMsQ0FBQztBQUVGLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxLQUFhLEVBQUUsU0FBaUIsRUFBRSxTQUFpQixFQUFFLEVBQUU7SUFDcEYsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0csQ0FBQyxDQUFDO0FBRUYsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQ2hDLElBQWdCLEVBQ2hCLElBQVksRUFDWixnQkFBd0IsRUFDeEIsZ0JBQWdDLEVBQ2hDLEVBQUU7SUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDdkYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFFL0QsUUFBUSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtJQUMzQyxJQUFJLElBQWlCLENBQUM7SUFDdEIsSUFBSSxRQUFrQixDQUFDO0lBRXZCLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNwQixJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzVELHVDQUF1QztRQUN2QyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVyRDs7Ozs7Ozs7V0FRRztRQUVILE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRXpFLElBQUksVUFBVSxHQUFHLGVBQWUsQ0FBQztRQUNqQyxnSUFBZ0k7UUFDaEksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdEQsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFakQsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsNkNBQTZDO1FBQ3JFLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUV2QixJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNsRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFekIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFMUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ2pELElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FDakYsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUVwRTs7Ozs7Ozs7V0FRRztRQUNILFVBQVUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEQsR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzdDLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUU5QyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUvQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDakQsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUMvRSxDQUFDO1FBRUYsd0NBQXdDO1FBQ3hDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQy9HLE1BQU0sb0JBQW9CLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUV0RTs7Ozs7Ozs7V0FRRztRQUNILFVBQVUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEQsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdEQsR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUU5QyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUvQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDakQsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUN0RSxDQUFDO1FBRUYsd0NBQXdDO1FBQ3hDLE1BQU0sb0JBQW9CLENBQ3hCLElBQUksRUFDSixXQUFXLEVBQ1gsRUFBRSxFQUNGLElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FDN0UsQ0FBQztRQUVGOzs7Ozs7OztXQVFHO1FBQ0gsR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELFVBQVUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RSxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEQsR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUU5QyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUvQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDakQsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUNwRSxDQUFDO1FBRUYsd0NBQXdDO1FBQ3hDLE1BQU0sb0JBQW9CLENBQ3hCLElBQUksRUFDSixXQUFXLEVBQ1gsRUFBRSxFQUNGLElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FDN0UsQ0FBQztRQUVGOzs7Ozs7OztXQVFHO1FBQ0gsVUFBVSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDbkQsSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRW5DLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTVDLHdDQUF3QztRQUN4QyxNQUFNLG9CQUFvQixDQUN4QixJQUFJLEVBQ0osV0FBVyxFQUNYLEVBQUUsRUFDRixJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQzdFLENBQUM7UUFFRixtQ0FBbUM7UUFDbkMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ2pELElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FDdEUsQ0FBQztRQUNGLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUNqRCxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQ3BFLENBQUM7UUFDRixNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoSCxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoSCxpQ0FBaUM7UUFDakMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUNsRCxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQzdFLENBQUM7UUFDRixNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDbEQsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUM3RSxDQUFDO1FBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ25HLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXBFLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLDhEQUE4RDtRQUM5RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN6RztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzdELHVDQUF1QztRQUN2QyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVyRDs7Ozs7Ozs7V0FRRztRQUVILE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEYsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDckUsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDekUsSUFBSSxVQUFVLEdBQUcsZUFBZSxDQUFDO1FBRWpDLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3RELElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRWpELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNwQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFFcEIsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRXpCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzFHLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBRS9HLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUNqRCxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQ2pGLENBQUM7UUFFRixNQUFNLG9CQUFvQixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFcEU7Ozs7Ozs7O1dBUUc7UUFDSCxVQUFVLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM3QyxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFOUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ2pELElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FDL0UsQ0FBQztRQUVGLHdDQUF3QztRQUN4QyxNQUFNLG9CQUFvQixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFdEU7Ozs7Ozs7O1dBUUc7UUFDSCxVQUFVLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0UsR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3RELEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFOUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ2pELElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FDdEUsQ0FBQztRQUVGLHdDQUF3QztRQUN4QyxNQUFNLG9CQUFvQixDQUN4QixJQUFJLEVBQ0osV0FBVyxFQUNYLEVBQUUsRUFDRixJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQzFFLENBQUM7UUFFRjs7Ozs7Ozs7V0FRRztRQUNILEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxVQUFVLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkUsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0UsR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFOUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ2pELElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FDcEUsQ0FBQztRQUVGLHdDQUF3QztRQUN4QyxNQUFNLG9CQUFvQixDQUN4QixJQUFJLEVBQ0osV0FBVyxFQUNYLEVBQUUsRUFDRixJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQzFFLENBQUM7UUFFRixxQkFBcUI7UUFDckIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFckMsaUVBQWlFO1FBQ2pFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTVDOzs7Ozs7OztXQVFHO1FBQ0gsVUFBVSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkQsSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRW5DLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTVDLHdDQUF3QztRQUN4QyxNQUFNLG9CQUFvQixDQUN4QixJQUFJLEVBQ0osV0FBVyxFQUNYLEVBQUUsRUFDRixJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQzFFLENBQUM7UUFFRixzQ0FBc0M7UUFDdEMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEgsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEgsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ2pELElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FDdEUsQ0FBQztRQUNGLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUNqRCxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQ3BFLENBQUM7UUFFRixpQ0FBaUM7UUFDakMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUNsRCxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQzFFLENBQUM7UUFDRixNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDbEQsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUMxRSxDQUFDO1FBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXBFLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLDhEQUE4RDtRQUM5RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN6RztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgseUdBQXlHO0lBQ3pHLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDTix1SUFBdUk7UUFDdkksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUM3QyxDQUFDLENBQUMsbURBQW1ELEVBQUUsS0FBSyxFQUFDLFVBQVUsRUFBQyxFQUFFO1FBQ2xGLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFOUQsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUMsd0NBQXdDO1FBQ2hFLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsOENBQThDO1FBQzNFLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLDREQUE0RDtRQUV0Rix1Q0FBdUM7UUFDdkMsTUFBTSxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUM5RyxNQUFNLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRTlHLE1BQU0sVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxNQUFNLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRXJELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMifQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"standard_tree.test.d.ts","sourceRoot":"","sources":["../../src/standard_tree/standard_tree.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { CircuitsWasm } from '@aztec/circuits.js';
|
|
2
|
-
import { randomBytes } from '@aztec/foundation/crypto';
|
|
3
|
-
import { default as levelup } from 'levelup';
|
|
4
|
-
import { loadTree } from '../load_tree.js';
|
|
5
|
-
import { newTree } from '../new_tree.js';
|
|
6
|
-
import { standardBasedTreeTestSuite } from '../test/standard_based_test_suite.js';
|
|
7
|
-
import { treeTestSuite } from '../test/test_suite.js';
|
|
8
|
-
import { createMemDown } from '../test/utils/create_mem_down.js';
|
|
9
|
-
import { PedersenWithCounter } from '../test/utils/pedersen_with_counter.js';
|
|
10
|
-
import { INITIAL_LEAF } from '../tree_base.js';
|
|
11
|
-
import { StandardTree } from './standard_tree.js';
|
|
12
|
-
const createDb = async (levelUp, hasher, name, depth) => {
|
|
13
|
-
return await newTree(StandardTree, levelUp, hasher, name, depth);
|
|
14
|
-
};
|
|
15
|
-
const createFromName = async (levelUp, hasher, name) => {
|
|
16
|
-
return await loadTree(StandardTree, levelUp, hasher, name);
|
|
17
|
-
};
|
|
18
|
-
treeTestSuite('StandardTree', createDb, createFromName);
|
|
19
|
-
standardBasedTreeTestSuite('StandardTree', createDb);
|
|
20
|
-
describe('StandardTree_batchAppend', () => {
|
|
21
|
-
let wasm;
|
|
22
|
-
let pedersen;
|
|
23
|
-
beforeAll(async () => {
|
|
24
|
-
wasm = await CircuitsWasm.get();
|
|
25
|
-
pedersen = new PedersenWithCounter(wasm);
|
|
26
|
-
});
|
|
27
|
-
afterEach(() => {
|
|
28
|
-
pedersen.resetCounter();
|
|
29
|
-
});
|
|
30
|
-
it('correctly computes root when batch appending and calls compress function expected num times', async () => {
|
|
31
|
-
const db = levelup(createMemDown());
|
|
32
|
-
const tree = await createDb(db, pedersen, 'test', 3);
|
|
33
|
-
const leaves = Array.from({ length: 5 }, _ => randomBytes(32));
|
|
34
|
-
pedersen.resetCounter();
|
|
35
|
-
await tree.appendLeaves(leaves);
|
|
36
|
-
// We append 5 leaves so to update values we do the following hashing on each level:
|
|
37
|
-
// level2Node0 level2Node1 level2Node2
|
|
38
|
-
// LEVEL2: [newLeaf0, newLeaf1], [newLeaf2, newLeaf3], [newLeaf4, INITIAL_LEAF].
|
|
39
|
-
// level1Node0 level1Node1
|
|
40
|
-
// LEVEL1: [level2Node0, level2Node1], [level2Node2, level2ZeroHash].
|
|
41
|
-
// ROOT
|
|
42
|
-
// LEVEL0: [level1Node0, level1Node1].
|
|
43
|
-
const level2NumHashing = 3;
|
|
44
|
-
const level1NumHashing = 2;
|
|
45
|
-
const level0NumHashing = 1;
|
|
46
|
-
const expectedNumHashing = level2NumHashing + level1NumHashing + level0NumHashing;
|
|
47
|
-
expect(pedersen.compressCounter).toEqual(expectedNumHashing);
|
|
48
|
-
const level2Node0 = pedersen.compress(leaves[0], leaves[1]);
|
|
49
|
-
const level2Node1 = pedersen.compress(leaves[2], leaves[3]);
|
|
50
|
-
const level2Node2 = pedersen.compress(leaves[4], INITIAL_LEAF);
|
|
51
|
-
const level2ZeroHash = pedersen.compress(INITIAL_LEAF, INITIAL_LEAF);
|
|
52
|
-
const level1Node0 = pedersen.compress(level2Node0, level2Node1);
|
|
53
|
-
const level1Node1 = pedersen.compress(level2Node2, level2ZeroHash);
|
|
54
|
-
const root = pedersen.compress(level1Node0, level1Node1);
|
|
55
|
-
expect(tree.getRoot(true)).toEqual(root);
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRfdHJlZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0YW5kYXJkX3RyZWUvc3RhbmRhcmRfdHJlZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJdkQsT0FBTyxFQUFFLE9BQU8sSUFBSSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsTUFBTSxRQUFRLEdBQUcsS0FBSyxFQUFFLE9BQXdCLEVBQUUsTUFBYyxFQUFFLElBQVksRUFBRSxLQUFhLEVBQUUsRUFBRTtJQUMvRixPQUFPLE1BQU0sT0FBTyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuRSxDQUFDLENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQUUsT0FBd0IsRUFBRSxNQUFjLEVBQUUsSUFBWSxFQUFFLEVBQUU7SUFDdEYsT0FBTyxNQUFNLFFBQVEsQ0FBQyxZQUFZLEVB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
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { Hasher } from '@aztec/types';
|
|
2
|
-
import { default as levelup } from 'levelup';
|
|
3
|
-
import { AppendOnlyTree } from '../interfaces/append_only_tree.js';
|
|
4
|
-
import { UpdateOnlyTree } from '../interfaces/update_only_tree.js';
|
|
5
|
-
export declare const standardBasedTreeTestSuite: (testName: string, createDb: (levelup: levelup.LevelUp<import("abstract-leveldown").AbstractLevelDOWN<any, any>, import("abstract-leveldown").AbstractIterator<any, any>>, hasher: Hasher, name: string, depth: number) => Promise<AppendOnlyTree | UpdateOnlyTree>) => void;
|
|
6
|
-
//# sourceMappingURL=standard_based_test_suite.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"standard_based_test_suite.d.ts","sourceRoot":"","sources":["../../src/test/standard_based_test_suite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAe,MAAM,cAAc,CAAC;AAGnD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,SAAS,CAAC;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAMnE,eAAO,MAAM,0BAA0B,aAC3B,MAAM,kKAGN,MAAM,QACR,MAAM,SACL,MAAM,KACV,QAAQ,cAAc,GAAG,cAAc,CAAC,SAuH9C,CAAC"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { CircuitsWasm } from '@aztec/circuits.js';
|
|
2
|
-
import { SiblingPath } from '@aztec/types';
|
|
3
|
-
import { randomBytes } from 'crypto';
|
|
4
|
-
import { default as levelup } from 'levelup';
|
|
5
|
-
import { INITIAL_LEAF, Pedersen } from '../index.js';
|
|
6
|
-
import { appendLeaves } from './utils/append_leaves.js';
|
|
7
|
-
import { createMemDown } from './utils/create_mem_down.js';
|
|
8
|
-
const TEST_TREE_DEPTH = 2;
|
|
9
|
-
export const standardBasedTreeTestSuite = (testName, createDb) => {
|
|
10
|
-
describe(testName, () => {
|
|
11
|
-
let wasm;
|
|
12
|
-
let pedersen;
|
|
13
|
-
const values = [];
|
|
14
|
-
beforeAll(async () => {
|
|
15
|
-
wasm = await CircuitsWasm.get();
|
|
16
|
-
pedersen = new Pedersen(wasm);
|
|
17
|
-
for (let i = 0; i < 4; ++i) {
|
|
18
|
-
const v = Buffer.alloc(32, i + 1);
|
|
19
|
-
v.writeUInt32BE(i, 28);
|
|
20
|
-
values[i] = v;
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
it('should have correct empty tree root for depth 32', async () => {
|
|
24
|
-
const db = levelup(createMemDown());
|
|
25
|
-
const tree = await createDb(db, pedersen, 'test', 32);
|
|
26
|
-
const root = tree.getRoot(false);
|
|
27
|
-
expect(root.toString('hex')).toEqual('20efbe2c7b675f26ab71689279908bbab33a6963e7e0dcb80e4c46583d094113');
|
|
28
|
-
});
|
|
29
|
-
it('should throw when appending beyond max index', async () => {
|
|
30
|
-
const db = levelup(createMemDown());
|
|
31
|
-
const tree = await createDb(db, pedersen, 'test', 2);
|
|
32
|
-
const leaves = Array.from({ length: 5 }, _ => randomBytes(32));
|
|
33
|
-
await expect(appendLeaves(tree, leaves)).rejects.toThrow();
|
|
34
|
-
});
|
|
35
|
-
it('should have correct root and sibling paths', async () => {
|
|
36
|
-
const db = levelup(createMemDown());
|
|
37
|
-
const tree = await createDb(db, pedersen, 'test', 2);
|
|
38
|
-
const level1ZeroHash = pedersen.compress(INITIAL_LEAF, INITIAL_LEAF);
|
|
39
|
-
expect(tree.getNumLeaves(false)).toEqual(0n);
|
|
40
|
-
expect(tree.getRoot(false)).toEqual(pedersen.compress(level1ZeroHash, level1ZeroHash));
|
|
41
|
-
expect(await tree.getSiblingPath(0n, false)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash]));
|
|
42
|
-
await appendLeaves(tree, [values[0]]);
|
|
43
|
-
expect(tree.getNumLeaves(true)).toEqual(1n);
|
|
44
|
-
expect(tree.getNumLeaves(false)).toEqual(0n);
|
|
45
|
-
expect(tree.getRoot(true)).toEqual(pedersen.compress(pedersen.compress(values[0], INITIAL_LEAF), level1ZeroHash));
|
|
46
|
-
expect(await tree.getSiblingPath(0n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash]));
|
|
47
|
-
expect(tree.getRoot(false)).toEqual(pedersen.compress(level1ZeroHash, level1ZeroHash));
|
|
48
|
-
expect(await tree.getSiblingPath(0n, false)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash]));
|
|
49
|
-
await appendLeaves(tree, [values[1]]);
|
|
50
|
-
expect(tree.getNumLeaves(true)).toEqual(2n);
|
|
51
|
-
expect(tree.getRoot(true)).toEqual(pedersen.compress(pedersen.compress(values[0], values[1]), level1ZeroHash));
|
|
52
|
-
expect(await tree.getSiblingPath(1n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [values[0], level1ZeroHash]));
|
|
53
|
-
expect(tree.getNumLeaves(false)).toEqual(0n);
|
|
54
|
-
expect(tree.getRoot(false)).toEqual(pedersen.compress(level1ZeroHash, level1ZeroHash));
|
|
55
|
-
expect(await tree.getSiblingPath(1n, false)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash]));
|
|
56
|
-
await appendLeaves(tree, [values[2]]);
|
|
57
|
-
expect(tree.getNumLeaves(true)).toEqual(3n);
|
|
58
|
-
expect(tree.getRoot(true)).toEqual(pedersen.compress(pedersen.compress(values[0], values[1]), pedersen.compress(values[2], INITIAL_LEAF)));
|
|
59
|
-
expect(await tree.getSiblingPath(2n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, pedersen.compress(values[0], values[1])]));
|
|
60
|
-
expect(tree.getNumLeaves(false)).toEqual(0n);
|
|
61
|
-
expect(tree.getRoot(false)).toEqual(pedersen.compress(level1ZeroHash, level1ZeroHash));
|
|
62
|
-
expect(await tree.getSiblingPath(2n, false)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash]));
|
|
63
|
-
await appendLeaves(tree, [values[3]]);
|
|
64
|
-
expect(tree.getNumLeaves(true)).toEqual(4n);
|
|
65
|
-
expect(tree.getRoot(true)).toEqual(pedersen.compress(pedersen.compress(values[0], values[1]), pedersen.compress(values[2], values[3])));
|
|
66
|
-
expect(await tree.getSiblingPath(3n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [values[2], pedersen.compress(values[0], values[1])]));
|
|
67
|
-
expect(tree.getNumLeaves(false)).toEqual(0n);
|
|
68
|
-
expect(tree.getRoot(false)).toEqual(pedersen.compress(level1ZeroHash, level1ZeroHash));
|
|
69
|
-
expect(await tree.getSiblingPath(3n, false)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [INITIAL_LEAF, level1ZeroHash]));
|
|
70
|
-
// Lifted from memory_tree.test.cpp to ensure consistency.
|
|
71
|
-
//expect(root.toString('hex')).toEqual('0bf2e78afd70f72b0e6eafb03c41faef167a82441b05e517cdf35d813302061f');
|
|
72
|
-
expect(await tree.getSiblingPath(0n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [values[1], pedersen.compress(values[2], values[3])]));
|
|
73
|
-
expect(await tree.getSiblingPath(1n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [values[0], pedersen.compress(values[2], values[3])]));
|
|
74
|
-
expect(await tree.getSiblingPath(2n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [values[3], pedersen.compress(values[0], values[1])]));
|
|
75
|
-
expect(await tree.getSiblingPath(3n, true)).toEqual(new SiblingPath(TEST_TREE_DEPTH, [values[2], pedersen.compress(values[0], values[1])]));
|
|
76
|
-
await tree.commit();
|
|
77
|
-
// now committed state should equal uncommitted state
|
|
78
|
-
expect(await tree.getSiblingPath(0n, false)).toEqual(await tree.getSiblingPath(0n, true));
|
|
79
|
-
expect(await tree.getSiblingPath(1n, false)).toEqual(await tree.getSiblingPath(1n, true));
|
|
80
|
-
expect(await tree.getSiblingPath(2n, false)).toEqual(await tree.getSiblingPath(2n, true));
|
|
81
|
-
expect(await tree.getSiblingPath(3n, false)).toEqual(await tree.getSiblingPath(3n, true));
|
|
82
|
-
expect(tree.getNumLeaves(false)).toEqual(tree.getNumLeaves(true));
|
|
83
|
-
expect(tree.getRoot(false)).toEqual(tree.getRoot(true));
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
};
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRfYmFzZWRfdGVzdF9zdWl0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3N0YW5kYXJkX2Jhc2VkX3Rlc3Rfc3VpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxELE9BQU8sRUFBVSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxJQUFJLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTNELE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUUxQixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUN4QyxRQUFnQixFQUNoQixRQUs2QyxFQUM3QyxFQUFFO0lBQ0YsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDdEIsSUFBSSxJQUFpQixDQUFDO1FBQ3RCLElBQUksUUFBa0IsQ0FBQztRQUN2QixNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFFNUIsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ25CLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoQyxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtnQkFDMUIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUss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
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { Hasher } from '@aztec/types';
|
|
2
|
-
import { default as levelup } from 'levelup';
|
|
3
|
-
import { AppendOnlyTree } from '../interfaces/append_only_tree.js';
|
|
4
|
-
import { UpdateOnlyTree } from '../interfaces/update_only_tree.js';
|
|
5
|
-
export declare const treeTestSuite: (testName: string, createDb: (levelup: levelup.LevelUp<import("abstract-leveldown").AbstractLevelDOWN<any, any>, import("abstract-leveldown").AbstractIterator<any, any>>, hasher: Hasher, name: string, depth: number) => Promise<AppendOnlyTree | UpdateOnlyTree>, createFromName: (levelup: levelup.LevelUp<import("abstract-leveldown").AbstractLevelDOWN<any, any>, import("abstract-leveldown").AbstractIterator<any, any>>, hasher: Hasher, name: string) => Promise<AppendOnlyTree | UpdateOnlyTree>) => void;
|
|
6
|
-
//# sourceMappingURL=test_suite.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test_suite.d.ts","sourceRoot":"","sources":["../../src/test/test_suite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAe,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,SAAS,CAAC;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAoBnE,eAAO,MAAM,aAAa,aACd,MAAM,kKAGN,MAAM,QACR,MAAM,SACL,MAAM,KACV,QAAQ,cAAc,GAAG,cAAc,CAAC,wKACM,MAAM,QAAQ,MAAM,KAAK,QAAQ,cAAc,GAAG,cAAc,CAAC,SAgIrH,CAAC"}
|