@aztec/merkle-tree 0.74.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2
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/hasher_with_stats.js +17 -13
- package/dest/index.js +0 -1
- package/dest/interfaces/append_only_tree.js +3 -2
- package/dest/interfaces/indexed_tree.js +3 -2
- package/dest/interfaces/merkle_tree.js +3 -2
- package/dest/interfaces/update_only_tree.js +3 -2
- package/dest/load_tree.js +1 -3
- package/dest/new_tree.js +1 -3
- package/dest/pedersen.js +12 -13
- package/dest/poseidon.js +12 -13
- package/dest/sha_256.js +22 -23
- package/dest/snapshots/append_only_snapshot.js +98 -79
- package/dest/snapshots/base_full_snapshot.js +77 -43
- package/dest/snapshots/full_snapshot.js +4 -6
- package/dest/snapshots/indexed_tree_snapshot.js +27 -25
- package/dest/snapshots/snapshot_builder.js +1 -2
- package/dest/snapshots/snapshot_builder_test_suite.js +43 -43
- package/dest/sparse_tree/sparse_tree.js +9 -19
- package/dest/standard_indexed_tree/standard_indexed_tree.js +251 -278
- package/dest/standard_indexed_tree/test/standard_indexed_tree_with_append.js +12 -17
- package/dest/standard_tree/standard_tree.js +10 -19
- package/dest/tree_base.js +109 -111
- package/dest/unbalanced_tree.js +84 -88
- package/package.json +6 -6
- package/dest/hasher_with_stats.d.ts +0 -22
- package/dest/hasher_with_stats.d.ts.map +0 -1
- package/dest/index.d.ts +0 -20
- package/dest/index.d.ts.map +0 -1
- package/dest/interfaces/append_only_tree.d.ts +0 -16
- package/dest/interfaces/append_only_tree.d.ts.map +0 -1
- package/dest/interfaces/indexed_tree.d.ts +0 -69
- package/dest/interfaces/indexed_tree.d.ts.map +0 -1
- package/dest/interfaces/merkle_tree.d.ts +0 -64
- package/dest/interfaces/merkle_tree.d.ts.map +0 -1
- package/dest/interfaces/update_only_tree.d.ts +0 -17
- package/dest/interfaces/update_only_tree.d.ts.map +0 -1
- package/dest/load_tree.d.ts +0 -16
- package/dest/load_tree.d.ts.map +0 -1
- package/dest/new_tree.d.ts +0 -16
- package/dest/new_tree.d.ts.map +0 -1
- package/dest/pedersen.d.ts +0 -13
- package/dest/pedersen.d.ts.map +0 -1
- package/dest/poseidon.d.ts +0 -13
- package/dest/poseidon.d.ts.map +0 -1
- package/dest/sha_256.d.ts +0 -22
- package/dest/sha_256.d.ts.map +0 -1
- package/dest/snapshots/append_only_snapshot.d.ts +0 -32
- package/dest/snapshots/append_only_snapshot.d.ts.map +0 -1
- package/dest/snapshots/base_full_snapshot.d.ts +0 -66
- package/dest/snapshots/base_full_snapshot.d.ts.map +0 -1
- package/dest/snapshots/full_snapshot.d.ts +0 -27
- package/dest/snapshots/full_snapshot.d.ts.map +0 -1
- package/dest/snapshots/indexed_tree_snapshot.d.ts +0 -16
- package/dest/snapshots/indexed_tree_snapshot.d.ts.map +0 -1
- package/dest/snapshots/snapshot_builder.d.ts +0 -85
- package/dest/snapshots/snapshot_builder.d.ts.map +0 -1
- package/dest/snapshots/snapshot_builder_test_suite.d.ts +0 -6
- package/dest/snapshots/snapshot_builder_test_suite.d.ts.map +0 -1
- package/dest/sparse_tree/sparse_tree.d.ts +0 -21
- package/dest/sparse_tree/sparse_tree.d.ts.map +0 -1
- package/dest/standard_indexed_tree/standard_indexed_tree.d.ts +0 -291
- package/dest/standard_indexed_tree/standard_indexed_tree.d.ts.map +0 -1
- package/dest/standard_indexed_tree/test/standard_indexed_tree_with_append.d.ts +0 -25
- package/dest/standard_indexed_tree/test/standard_indexed_tree_with_append.d.ts.map +0 -1
- package/dest/standard_tree/standard_tree.d.ts +0 -23
- package/dest/standard_tree/standard_tree.d.ts.map +0 -1
- package/dest/tree_base.d.ts +0 -159
- package/dest/tree_base.d.ts.map +0 -1
- package/dest/unbalanced_tree.d.ts +0 -109
- package/dest/unbalanced_tree.d.ts.map +0 -1
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
import { createHistogram, performance } from 'perf_hooks';
|
|
2
2
|
/**
|
|
3
3
|
* A helper class to track stats for a Hasher
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
*/ export class HasherWithStats {
|
|
5
|
+
hashCount = 0;
|
|
6
|
+
hashInputsCount = 0;
|
|
7
|
+
hashHistogram = createHistogram();
|
|
8
|
+
hashInputsHistogram = createHistogram();
|
|
9
|
+
hash;
|
|
10
|
+
hashInputs;
|
|
11
|
+
constructor(hasher){
|
|
12
|
+
this.hash = performance.timerify((lhs, rhs)=>{
|
|
12
13
|
this.hashCount++;
|
|
13
14
|
return hasher.hash(lhs, rhs);
|
|
14
|
-
}, {
|
|
15
|
-
|
|
15
|
+
}, {
|
|
16
|
+
histogram: this.hashHistogram
|
|
17
|
+
});
|
|
18
|
+
this.hashInputs = performance.timerify((inputs)=>{
|
|
16
19
|
this.hashInputsCount++;
|
|
17
20
|
return hasher.hashInputs(inputs);
|
|
18
|
-
}, {
|
|
21
|
+
}, {
|
|
22
|
+
histogram: this.hashInputsHistogram
|
|
23
|
+
});
|
|
19
24
|
}
|
|
20
25
|
stats() {
|
|
21
26
|
return {
|
|
@@ -23,7 +28,7 @@ export class HasherWithStats {
|
|
|
23
28
|
// timerify records in ns, convert to ms
|
|
24
29
|
hashDuration: this.hashHistogram.mean / 1e6,
|
|
25
30
|
hashInputsCount: this.hashInputsCount,
|
|
26
|
-
hashInputsDuration: this.hashInputsHistogram.mean / 1e6
|
|
31
|
+
hashInputsDuration: this.hashInputsHistogram.mean / 1e6
|
|
27
32
|
};
|
|
28
33
|
}
|
|
29
34
|
reset() {
|
|
@@ -33,4 +38,3 @@ export class HasherWithStats {
|
|
|
33
38
|
this.hashInputsHistogram.reset();
|
|
34
39
|
}
|
|
35
40
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaGVyX3dpdGhfc3RhdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaGFzaGVyX3dpdGhfc3RhdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFMUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQVMxQixZQUFZLE1BQWM7UUFSMUIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLGtCQUFhLEdBQUcsZUFBZSxFQUFFLENBQUM7UUFDbEMsd0JBQW1CLEdBQUcsZUFBZSxFQUFFLENBQUM7UUFNdEMsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUM5QixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNYLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUMsRUFDRCxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQ2xDLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQ3BDLENBQUMsTUFBZ0IsRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxFQUNELEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUN4QyxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPO1lBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLHdDQUF3QztZQUN4QyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsR0FBRztZQUMzQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDckMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksR0FBRyxHQUFHO1NBQ3hELENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ25DLENBQUM7Q0FDRiJ9
|
package/dest/index.js
CHANGED
|
@@ -17,4 +17,3 @@ export * from './snapshots/snapshot_builder.js';
|
|
|
17
17
|
export * from './snapshots/full_snapshot.js';
|
|
18
18
|
export * from './snapshots/append_only_snapshot.js';
|
|
19
19
|
export * from './snapshots/indexed_tree_snapshot.js';
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLDhCQUE4QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBQ2xILGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsc0NBQXNDLENBQUMifQ==
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* A Merkle tree that supports only appending leaves and not updating existing leaves.
|
|
3
|
+
*/ export { };
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Indexed merkle tree.
|
|
3
|
+
*/ export { };
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Defines the interface for a Merkle tree.
|
|
3
|
+
*/ export { };
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* A Merkle tree that supports updates at arbitrary indices but not appending.
|
|
3
|
+
*/ export { };
|
package/dest/load_tree.js
CHANGED
|
@@ -6,10 +6,8 @@ import { getTreeMeta } from './tree_base.js';
|
|
|
6
6
|
* @param hasher - A hasher used to compute hash paths.
|
|
7
7
|
* @param name - Name of the tree.
|
|
8
8
|
* @returns The newly created tree.
|
|
9
|
-
*/
|
|
10
|
-
export function loadTree(c, store, hasher, name, deserializer) {
|
|
9
|
+
*/ export function loadTree(c, store, hasher, name, deserializer) {
|
|
11
10
|
const { root, depth, size } = getTreeMeta(store, name);
|
|
12
11
|
const tree = new c(store, hasher, name, depth, size, deserializer, root);
|
|
13
12
|
return Promise.resolve(tree);
|
|
14
13
|
}
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZF90cmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRfdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQWlCLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUN0QixDQVFNLEVBQ04sS0FBbUIsRUFDbkIsTUFBYyxFQUNkLElBQVksRUFDWixZQUFlO0lBRWYsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6RSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQyJ9
|
package/dest/new_tree.js
CHANGED
|
@@ -7,10 +7,8 @@
|
|
|
7
7
|
* @param depth - Depth of the tree.
|
|
8
8
|
* @param prefilledSize - A number of leaves that are prefilled with values.
|
|
9
9
|
* @returns The newly created tree.
|
|
10
|
-
*/
|
|
11
|
-
export async function newTree(c, store, hasher, name, deserializer, depth, prefilledSize = 1) {
|
|
10
|
+
*/ export async function newTree(c, store, hasher, name, deserializer, depth, prefilledSize = 1) {
|
|
12
11
|
const tree = new c(store, hasher, name, depth, 0n, deserializer);
|
|
13
12
|
await tree.init(prefilledSize);
|
|
14
13
|
return tree;
|
|
15
14
|
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3X3RyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV3X3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUE7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLENBQzNCLENBQTZHLEVBQzdHLEtBQW1CLEVBQ25CLE1BQWMsRUFDZCxJQUFZLEVBQ1osWUFBZSxFQUNmLEtBQWEsRUFDYixhQUFhLEdBQUcsQ0FBQztJQUVqQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvQixPQUFPLElBQUksQ0FBQztBQUNkLENBQUMifQ==
|
package/dest/pedersen.js
CHANGED
|
@@ -4,22 +4,21 @@ import { Fr } from '@aztec/foundation/fields';
|
|
|
4
4
|
* A helper class encapsulating Pedersen hash functionality.
|
|
5
5
|
* @deprecated Don't call pedersen directly in production code. Instead, create suitably-named functions for specific
|
|
6
6
|
* purposes.
|
|
7
|
-
*/
|
|
8
|
-
export class Pedersen {
|
|
7
|
+
*/ export class Pedersen {
|
|
9
8
|
/*
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
* @deprecated Don't call pedersen directly in production code. Instead, create suitably-named functions for specific
|
|
10
|
+
* purposes.
|
|
11
|
+
*/ hash(lhs, rhs) {
|
|
12
|
+
return pedersenHash([
|
|
13
|
+
Fr.fromBuffer(Buffer.from(lhs)),
|
|
14
|
+
Fr.fromBuffer(Buffer.from(rhs))
|
|
15
|
+
]).toBuffer();
|
|
15
16
|
}
|
|
16
17
|
/*
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const inputFields = inputs.map(i => Fr.fromBuffer(i));
|
|
18
|
+
* @deprecated Don't call pedersen directly in production code. Instead, create suitably-named functions for specific
|
|
19
|
+
* purposes.
|
|
20
|
+
*/ hashInputs(inputs) {
|
|
21
|
+
const inputFields = inputs.map((i)=>Fr.fromBuffer(i));
|
|
22
22
|
return pedersenHash(inputFields).toBuffer();
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVkZXJzZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGVkZXJzZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUc5Qzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFDbkI7OztPQUdHO0lBQ0ksSUFBSSxDQUFDLEdBQWUsRUFBRSxHQUFlO1FBQzFDLE9BQU8sWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JHLENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVLENBQUMsTUFBZ0I7UUFDaEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxPQUFPLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0NBQ0YifQ==
|
package/dest/poseidon.js
CHANGED
|
@@ -4,22 +4,21 @@ import { Fr } from '@aztec/foundation/fields';
|
|
|
4
4
|
* A helper class encapsulating poseidon2 hash functionality.
|
|
5
5
|
* @deprecated Don't call poseidon2 directly in production code. Instead, create suitably-named functions for specific
|
|
6
6
|
* purposes.
|
|
7
|
-
*/
|
|
8
|
-
export class Poseidon {
|
|
7
|
+
*/ export class Poseidon {
|
|
9
8
|
/*
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
* @deprecated Don't call poseidon2 directly in production code. Instead, create suitably-named functions for specific
|
|
10
|
+
* purposes.
|
|
11
|
+
*/ hash(lhs, rhs) {
|
|
12
|
+
return poseidon2Hash([
|
|
13
|
+
Fr.fromBuffer(Buffer.from(lhs)),
|
|
14
|
+
Fr.fromBuffer(Buffer.from(rhs))
|
|
15
|
+
]).toBuffer();
|
|
15
16
|
}
|
|
16
17
|
/*
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const inputFields = inputs.map(i => Fr.fromBuffer(i));
|
|
18
|
+
* @deprecated Don't call poseidon2 directly in production code. Instead, create suitably-named functions for specific
|
|
19
|
+
* purposes.
|
|
20
|
+
*/ hashInputs(inputs) {
|
|
21
|
+
const inputFields = inputs.map((i)=>Fr.fromBuffer(i));
|
|
22
22
|
return poseidon2Hash(inputFields).toBuffer();
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zZWlkb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcG9zZWlkb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUc5Qzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFDbkI7OztPQUdHO0lBQ0ksSUFBSSxDQUFDLEdBQWUsRUFBRSxHQUFlO1FBQzFDLE9BQU8sYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RHLENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVLENBQUMsTUFBZ0I7UUFDaEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxPQUFPLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0NBQ0YifQ==
|
package/dest/sha_256.js
CHANGED
|
@@ -4,20 +4,20 @@ import { truncateAndPad } from '@aztec/foundation/serialize';
|
|
|
4
4
|
* A helper class encapsulating SHA256 hash functionality.
|
|
5
5
|
* @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
|
|
6
6
|
* purposes.
|
|
7
|
-
*/
|
|
8
|
-
export class SHA256 {
|
|
7
|
+
*/ export class SHA256 {
|
|
9
8
|
/*
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
* @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
|
|
10
|
+
* purposes.
|
|
11
|
+
*/ hash(lhs, rhs) {
|
|
12
|
+
return sha256(Buffer.concat([
|
|
13
|
+
Buffer.from(lhs),
|
|
14
|
+
Buffer.from(rhs)
|
|
15
|
+
]));
|
|
15
16
|
}
|
|
16
17
|
/*
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
hashInputs(inputs) {
|
|
18
|
+
* @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
|
|
19
|
+
* purposes.
|
|
20
|
+
*/ hashInputs(inputs) {
|
|
21
21
|
return sha256(Buffer.concat(inputs));
|
|
22
22
|
}
|
|
23
23
|
}
|
|
@@ -25,21 +25,20 @@ export class SHA256 {
|
|
|
25
25
|
* A helper class encapsulating truncated SHA256 hash functionality.
|
|
26
26
|
* @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
|
|
27
27
|
* purposes.
|
|
28
|
-
*/
|
|
29
|
-
export class SHA256Trunc {
|
|
28
|
+
*/ export class SHA256Trunc {
|
|
30
29
|
/*
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
* @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
|
|
31
|
+
* purposes.
|
|
32
|
+
*/ hash(lhs, rhs) {
|
|
33
|
+
return truncateAndPad(sha256(Buffer.concat([
|
|
34
|
+
Buffer.from(lhs),
|
|
35
|
+
Buffer.from(rhs)
|
|
36
|
+
])));
|
|
36
37
|
}
|
|
37
38
|
/*
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
hashInputs(inputs) {
|
|
39
|
+
* @deprecated Don't call SHA256 directly in production code. Instead, create suitably-named functions for specific
|
|
40
|
+
* purposes.
|
|
41
|
+
*/ hashInputs(inputs) {
|
|
42
42
|
return truncateAndPad(sha256(Buffer.concat(inputs)));
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhXzI1Ni5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zaGFfMjU2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHN0Q7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxNQUFNO0lBQ2pCOzs7T0FHRztJQUNJLElBQUksQ0FBQyxHQUFlLEVBQUUsR0FBZTtRQUMxQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVLENBQUMsTUFBZ0I7UUFDaEMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRjtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUN0Qjs7O09BR0c7SUFDSSxJQUFJLENBQUMsR0FBZSxFQUFFLEdBQWU7UUFDMUMsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksVUFBVSxDQUFDLE1BQWdCO1FBQ2hDLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0NBQ0YifQ==
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
var _AppendOnlySnapshotBuilder_instances, _AppendOnlySnapshotBuilder_nodeValue, _AppendOnlySnapshotBuilder_nodeLastModifiedByBlock, _AppendOnlySnapshotBuilder_snapshotMetadata, _AppendOnlySnapshotBuilder_getSnapshotMeta, _AppendOnlySnapshot_instances, _AppendOnlySnapshot_getHistoricalNodeValue, _AppendOnlySnapshot_getBlockNumberThatModifiedNode;
|
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
1
|
import { SiblingPath } from '@aztec/circuit-types';
|
|
4
2
|
import { serializeToBuffer } from '@aztec/foundation/serialize';
|
|
5
3
|
// stores the last block that modified this node
|
|
6
|
-
const nodeModifiedAtBlockKey = (level, index)
|
|
4
|
+
const nodeModifiedAtBlockKey = (level, index)=>`node:${level}:${index}:modifiedAtBlock`;
|
|
7
5
|
// stores the value of the node at the above block
|
|
8
|
-
const historicalNodeKey = (level, index)
|
|
6
|
+
const historicalNodeKey = (level, index)=>`node:${level}:${index}:value`;
|
|
9
7
|
/**
|
|
10
8
|
* A more space-efficient way of storing snapshots of AppendOnlyTrees that trades space need for slower
|
|
11
9
|
* sibling path reads.
|
|
@@ -20,85 +18,106 @@ const historicalNodeKey = (level, index) => `node:${level}:${index}:value`;
|
|
|
20
18
|
* Sibling path access:
|
|
21
19
|
* Best case: O(H) database reads + O(1) hashes
|
|
22
20
|
* Worst case: O(H) database reads + O(H) hashes
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
*/ export class AppendOnlySnapshotBuilder {
|
|
22
|
+
db;
|
|
23
|
+
tree;
|
|
24
|
+
hasher;
|
|
25
|
+
deserializer;
|
|
26
|
+
#nodeValue;
|
|
27
|
+
#nodeLastModifiedByBlock;
|
|
28
|
+
#snapshotMetadata;
|
|
29
|
+
constructor(db, tree, hasher, deserializer){
|
|
27
30
|
this.db = db;
|
|
28
31
|
this.tree = tree;
|
|
29
32
|
this.hasher = hasher;
|
|
30
33
|
this.deserializer = deserializer;
|
|
31
|
-
_AppendOnlySnapshotBuilder_nodeValue.set(this, void 0);
|
|
32
|
-
_AppendOnlySnapshotBuilder_nodeLastModifiedByBlock.set(this, void 0);
|
|
33
|
-
_AppendOnlySnapshotBuilder_snapshotMetadata.set(this, void 0);
|
|
34
34
|
const treeName = tree.getName();
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
this.#nodeValue = db.openMap(`append_only_snapshot:${treeName}:node`);
|
|
36
|
+
this.#nodeLastModifiedByBlock = db.openMap(`append_ony_snapshot:${treeName}:block`);
|
|
37
|
+
this.#snapshotMetadata = db.openMap(`append_only_snapshot:${treeName}:snapshot_metadata`);
|
|
38
38
|
}
|
|
39
39
|
getSnapshot(block) {
|
|
40
|
-
const meta =
|
|
40
|
+
const meta = this.#getSnapshotMeta(block);
|
|
41
41
|
if (typeof meta === 'undefined') {
|
|
42
42
|
return Promise.reject(new Error(`Snapshot for tree ${this.tree.getName()} at block ${block} does not exist`));
|
|
43
43
|
}
|
|
44
|
-
return Promise.resolve(new AppendOnlySnapshot(
|
|
44
|
+
return Promise.resolve(new AppendOnlySnapshot(this.#nodeValue, this.#nodeLastModifiedByBlock, block, meta.numLeaves, meta.root, this.tree, this.hasher, this.deserializer));
|
|
45
45
|
}
|
|
46
46
|
snapshot(block) {
|
|
47
|
-
return this.db.transaction(()
|
|
48
|
-
const meta =
|
|
47
|
+
return this.db.transaction(()=>{
|
|
48
|
+
const meta = this.#getSnapshotMeta(block);
|
|
49
49
|
if (typeof meta !== 'undefined') {
|
|
50
50
|
// no-op, we already have a snapshot
|
|
51
|
-
return new AppendOnlySnapshot(
|
|
51
|
+
return new AppendOnlySnapshot(this.#nodeValue, this.#nodeLastModifiedByBlock, block, meta.numLeaves, meta.root, this.tree, this.hasher, this.deserializer);
|
|
52
52
|
}
|
|
53
53
|
const root = this.tree.getRoot(false);
|
|
54
54
|
const depth = this.tree.getDepth();
|
|
55
|
-
const queue = [
|
|
55
|
+
const queue = [
|
|
56
|
+
[
|
|
57
|
+
root,
|
|
58
|
+
0,
|
|
59
|
+
0n
|
|
60
|
+
]
|
|
61
|
+
];
|
|
56
62
|
// walk the tree in BF and store latest nodes
|
|
57
|
-
while
|
|
63
|
+
while(queue.length > 0){
|
|
58
64
|
const [node, level, index] = queue.shift();
|
|
59
|
-
const historicalValue =
|
|
65
|
+
const historicalValue = this.#nodeValue.get(historicalNodeKey(level, index));
|
|
60
66
|
if (!historicalValue || !node.equals(historicalValue)) {
|
|
61
67
|
// we've never seen this node before or it's different than before
|
|
62
68
|
// update the historical tree and tag it with the block that modified it
|
|
63
|
-
void
|
|
64
|
-
void
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
// if this node hasn't changed, that means, nothing below it has changed either
|
|
69
|
+
void this.#nodeLastModifiedByBlock.set(nodeModifiedAtBlockKey(level, index), block);
|
|
70
|
+
void this.#nodeValue.set(historicalNodeKey(level, index), node);
|
|
71
|
+
} else {
|
|
68
72
|
continue;
|
|
69
73
|
}
|
|
70
74
|
if (level + 1 > depth) {
|
|
71
|
-
// short circuit if we've reached the leaf level
|
|
72
|
-
// otherwise getNode might throw if we ask for the children of a leaf
|
|
73
75
|
continue;
|
|
74
76
|
}
|
|
75
77
|
// these could be undefined because zero hashes aren't stored in the tree
|
|
76
|
-
const [lhs, rhs] = [
|
|
78
|
+
const [lhs, rhs] = [
|
|
79
|
+
this.tree.getNode(level + 1, 2n * index),
|
|
80
|
+
this.tree.getNode(level + 1, 2n * index + 1n)
|
|
81
|
+
];
|
|
77
82
|
if (lhs) {
|
|
78
|
-
queue.push([
|
|
83
|
+
queue.push([
|
|
84
|
+
lhs,
|
|
85
|
+
level + 1,
|
|
86
|
+
2n * index
|
|
87
|
+
]);
|
|
79
88
|
}
|
|
80
89
|
if (rhs) {
|
|
81
|
-
queue.push([
|
|
90
|
+
queue.push([
|
|
91
|
+
rhs,
|
|
92
|
+
level + 1,
|
|
93
|
+
2n * index + 1n
|
|
94
|
+
]);
|
|
82
95
|
}
|
|
83
96
|
}
|
|
84
97
|
const numLeaves = this.tree.getNumLeaves(false);
|
|
85
|
-
void
|
|
98
|
+
void this.#snapshotMetadata.set(block, {
|
|
86
99
|
numLeaves,
|
|
87
|
-
root
|
|
100
|
+
root
|
|
88
101
|
});
|
|
89
|
-
return new AppendOnlySnapshot(
|
|
102
|
+
return new AppendOnlySnapshot(this.#nodeValue, this.#nodeLastModifiedByBlock, block, numLeaves, root, this.tree, this.hasher, this.deserializer);
|
|
90
103
|
});
|
|
91
104
|
}
|
|
105
|
+
#getSnapshotMeta(block) {
|
|
106
|
+
return this.#snapshotMetadata.get(block);
|
|
107
|
+
}
|
|
92
108
|
}
|
|
93
|
-
_AppendOnlySnapshotBuilder_nodeValue = new WeakMap(), _AppendOnlySnapshotBuilder_nodeLastModifiedByBlock = new WeakMap(), _AppendOnlySnapshotBuilder_snapshotMetadata = new WeakMap(), _AppendOnlySnapshotBuilder_instances = new WeakSet(), _AppendOnlySnapshotBuilder_getSnapshotMeta = function _AppendOnlySnapshotBuilder_getSnapshotMeta(block) {
|
|
94
|
-
return __classPrivateFieldGet(this, _AppendOnlySnapshotBuilder_snapshotMetadata, "f").get(block);
|
|
95
|
-
};
|
|
96
109
|
/**
|
|
97
110
|
* a
|
|
98
|
-
*/
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
111
|
+
*/ class AppendOnlySnapshot {
|
|
112
|
+
nodes;
|
|
113
|
+
nodeHistory;
|
|
114
|
+
block;
|
|
115
|
+
leafCount;
|
|
116
|
+
historicalRoot;
|
|
117
|
+
tree;
|
|
118
|
+
hasher;
|
|
119
|
+
deserializer;
|
|
120
|
+
constructor(nodes, nodeHistory, block, leafCount, historicalRoot, tree, hasher, deserializer){
|
|
102
121
|
this.nodes = nodes;
|
|
103
122
|
this.nodeHistory = nodeHistory;
|
|
104
123
|
this.block = block;
|
|
@@ -112,10 +131,10 @@ class AppendOnlySnapshot {
|
|
|
112
131
|
const path = [];
|
|
113
132
|
const depth = this.tree.getDepth();
|
|
114
133
|
let level = depth;
|
|
115
|
-
while
|
|
134
|
+
while(level > 0){
|
|
116
135
|
const isRight = index & 0x01n;
|
|
117
136
|
const siblingIndex = isRight ? index - 1n : index + 1n;
|
|
118
|
-
const sibling =
|
|
137
|
+
const sibling = this.#getHistoricalNodeValue(level, siblingIndex);
|
|
119
138
|
path.push(sibling);
|
|
120
139
|
level -= 1;
|
|
121
140
|
index >>= 1n;
|
|
@@ -134,7 +153,7 @@ class AppendOnlySnapshot {
|
|
|
134
153
|
}
|
|
135
154
|
getLeafValue(index) {
|
|
136
155
|
const leafLevel = this.getDepth();
|
|
137
|
-
const blockNumber =
|
|
156
|
+
const blockNumber = this.#getBlockNumberThatModifiedNode(leafLevel, index);
|
|
138
157
|
// leaf hasn't been set yet
|
|
139
158
|
if (typeof blockNumber === 'undefined') {
|
|
140
159
|
return undefined;
|
|
@@ -147,13 +166,46 @@ class AppendOnlySnapshot {
|
|
|
147
166
|
// leaf has been set but in a block in the future
|
|
148
167
|
return undefined;
|
|
149
168
|
}
|
|
169
|
+
#getHistoricalNodeValue(level, index) {
|
|
170
|
+
const blockNumber = this.#getBlockNumberThatModifiedNode(level, index);
|
|
171
|
+
// node has never been set
|
|
172
|
+
if (typeof blockNumber === 'undefined') {
|
|
173
|
+
return this.tree.getZeroHash(level);
|
|
174
|
+
}
|
|
175
|
+
// node was set some time in the past
|
|
176
|
+
if (blockNumber <= this.block) {
|
|
177
|
+
return this.nodes.get(historicalNodeKey(level, index));
|
|
178
|
+
}
|
|
179
|
+
// the node has been modified since this snapshot was taken
|
|
180
|
+
// because we're working with an AppendOnly tree, historical leaves never change
|
|
181
|
+
// so what we do instead is rebuild this Merkle path up using zero hashes as needed
|
|
182
|
+
// worst case this will do O(H) hashes
|
|
183
|
+
//
|
|
184
|
+
// we first check if this subtree was touched by the block
|
|
185
|
+
// compare how many leaves this block added to the leaf interval of this subtree
|
|
186
|
+
// if they don't intersect then the whole subtree was a hash of zero
|
|
187
|
+
// if they do then we need to rebuild the merkle tree
|
|
188
|
+
const depth = this.tree.getDepth();
|
|
189
|
+
const leafStart = index * 2n ** BigInt(depth - level);
|
|
190
|
+
if (leafStart >= this.leafCount) {
|
|
191
|
+
return this.tree.getZeroHash(level);
|
|
192
|
+
}
|
|
193
|
+
const [lhs, rhs] = [
|
|
194
|
+
this.#getHistoricalNodeValue(level + 1, 2n * index),
|
|
195
|
+
this.#getHistoricalNodeValue(level + 1, 2n * index + 1n)
|
|
196
|
+
];
|
|
197
|
+
return this.hasher.hash(lhs, rhs);
|
|
198
|
+
}
|
|
199
|
+
#getBlockNumberThatModifiedNode(level, index) {
|
|
200
|
+
return this.nodeHistory.get(nodeModifiedAtBlockKey(level, index));
|
|
201
|
+
}
|
|
150
202
|
findLeafIndex(value) {
|
|
151
203
|
return this.findLeafIndexAfter(value, 0n);
|
|
152
204
|
}
|
|
153
205
|
findLeafIndexAfter(value, startIndex) {
|
|
154
206
|
const valueBuffer = serializeToBuffer(value);
|
|
155
207
|
const numLeaves = this.getNumLeaves();
|
|
156
|
-
for
|
|
208
|
+
for(let i = startIndex; i < numLeaves; i++){
|
|
157
209
|
const currentValue = this.getLeafValue(i);
|
|
158
210
|
if (currentValue && serializeToBuffer(currentValue).equals(valueBuffer)) {
|
|
159
211
|
return i;
|
|
@@ -162,36 +214,3 @@ class AppendOnlySnapshot {
|
|
|
162
214
|
return undefined;
|
|
163
215
|
}
|
|
164
216
|
}
|
|
165
|
-
_AppendOnlySnapshot_instances = new WeakSet(), _AppendOnlySnapshot_getHistoricalNodeValue = function _AppendOnlySnapshot_getHistoricalNodeValue(level, index) {
|
|
166
|
-
const blockNumber = __classPrivateFieldGet(this, _AppendOnlySnapshot_instances, "m", _AppendOnlySnapshot_getBlockNumberThatModifiedNode).call(this, level, index);
|
|
167
|
-
// node has never been set
|
|
168
|
-
if (typeof blockNumber === 'undefined') {
|
|
169
|
-
return this.tree.getZeroHash(level);
|
|
170
|
-
}
|
|
171
|
-
// node was set some time in the past
|
|
172
|
-
if (blockNumber <= this.block) {
|
|
173
|
-
return this.nodes.get(historicalNodeKey(level, index));
|
|
174
|
-
}
|
|
175
|
-
// the node has been modified since this snapshot was taken
|
|
176
|
-
// because we're working with an AppendOnly tree, historical leaves never change
|
|
177
|
-
// so what we do instead is rebuild this Merkle path up using zero hashes as needed
|
|
178
|
-
// worst case this will do O(H) hashes
|
|
179
|
-
//
|
|
180
|
-
// we first check if this subtree was touched by the block
|
|
181
|
-
// compare how many leaves this block added to the leaf interval of this subtree
|
|
182
|
-
// if they don't intersect then the whole subtree was a hash of zero
|
|
183
|
-
// if they do then we need to rebuild the merkle tree
|
|
184
|
-
const depth = this.tree.getDepth();
|
|
185
|
-
const leafStart = index * 2n ** BigInt(depth - level);
|
|
186
|
-
if (leafStart >= this.leafCount) {
|
|
187
|
-
return this.tree.getZeroHash(level);
|
|
188
|
-
}
|
|
189
|
-
const [lhs, rhs] = [
|
|
190
|
-
__classPrivateFieldGet(this, _AppendOnlySnapshot_instances, "m", _AppendOnlySnapshot_getHistoricalNodeValue).call(this, level + 1, 2n * index),
|
|
191
|
-
__classPrivateFieldGet(this, _AppendOnlySnapshot_instances, "m", _AppendOnlySnapshot_getHistoricalNodeValue).call(this, level + 1, 2n * index + 1n),
|
|
192
|
-
];
|
|
193
|
-
return this.hasher.hash(lhs, rhs);
|
|
194
|
-
}, _AppendOnlySnapshot_getBlockNumberThatModifiedNode = function _AppendOnlySnapshot_getBlockNumberThatModifiedNode(level, index) {
|
|
195
|
-
return this.nodeHistory.get(nodeModifiedAtBlockKey(level, index));
|
|
196
|
-
};
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kX29ubHlfc25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc25hcHNob3RzL2FwcGVuZF9vbmx5X3NuYXBzaG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBb0MsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQVFsRyxnREFBZ0Q7QUFDaEQsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEtBQWEsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLEtBQUssa0JBQWtCLENBQUM7QUFFMUcsa0RBQWtEO0FBQ2xELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFhLEVBQUUsS0FBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxLQUFLLFFBQVEsQ0FBQztBQVkzRjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sT0FBTyx5QkFBeUI7SUFLcEMsWUFDVSxFQUFnQixFQUNoQixJQUFxQyxFQUNyQyxNQUFjLEVBQ2QsWUFBMkI7O1FBSDNCLE9BQUUsR0FBRixFQUFFLENBQWM7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBaUM7UUFDckMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBUnJDLHVEQUFtRTtRQUNuRSxxRUFBc0Y7UUFDdEYsOERBQXNEO1FBUXBELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQyx1QkFBQSxJQUFJLHdDQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLFFBQVEsT0FBTyxDQUFDLE1BQUEsQ0FBQztRQUN0RSx1QkFBQSxJQUFJLHNEQUE0QixFQUFFLENBQUMsT0FBTyxDQUFDLHVCQUF1QixRQUFRLFFBQVEsQ0FBQyxNQUFBLENBQUM7UUFDcEYsdUJBQUEsSUFBSSwrQ0FBcUIs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
|