@aztec/merkle-tree 0.31.0 → 0.32.1
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.d.ts +1 -1
- package/dest/hasher_with_stats.d.ts.map +1 -1
- package/dest/interfaces/append_only_tree.d.ts +5 -4
- package/dest/interfaces/append_only_tree.d.ts.map +1 -1
- package/dest/interfaces/indexed_tree.d.ts +6 -4
- package/dest/interfaces/indexed_tree.d.ts.map +1 -1
- package/dest/interfaces/merkle_tree.d.ts +6 -5
- package/dest/interfaces/merkle_tree.d.ts.map +1 -1
- package/dest/interfaces/update_only_tree.d.ts +5 -4
- package/dest/interfaces/update_only_tree.d.ts.map +1 -1
- package/dest/load_tree.d.ts +5 -4
- package/dest/load_tree.d.ts.map +1 -1
- package/dest/load_tree.js +3 -3
- package/dest/new_tree.d.ts +5 -4
- package/dest/new_tree.d.ts.map +1 -1
- package/dest/new_tree.js +3 -3
- package/dest/pedersen.d.ts +1 -1
- package/dest/pedersen.d.ts.map +1 -1
- package/dest/sha_256.d.ts +1 -1
- package/dest/sha_256.d.ts.map +1 -1
- package/dest/snapshots/append_only_snapshot.d.ts +11 -9
- package/dest/snapshots/append_only_snapshot.d.ts.map +1 -1
- package/dest/snapshots/append_only_snapshot.js +13 -8
- package/dest/snapshots/base_full_snapshot.d.ts +12 -10
- package/dest/snapshots/base_full_snapshot.d.ts.map +1 -1
- package/dest/snapshots/base_full_snapshot.js +7 -4
- package/dest/snapshots/full_snapshot.d.ts +8 -4
- package/dest/snapshots/full_snapshot.d.ts.map +1 -1
- package/dest/snapshots/full_snapshot.js +6 -2
- package/dest/snapshots/indexed_tree_snapshot.d.ts +6 -6
- package/dest/snapshots/indexed_tree_snapshot.d.ts.map +1 -1
- package/dest/snapshots/indexed_tree_snapshot.js +2 -2
- package/dest/snapshots/snapshot_builder.d.ts +9 -8
- package/dest/snapshots/snapshot_builder.d.ts.map +1 -1
- package/dest/snapshots/snapshot_builder_test_suite.d.ts +4 -3
- package/dest/snapshots/snapshot_builder_test_suite.d.ts.map +1 -1
- package/dest/snapshots/snapshot_builder_test_suite.js +5 -2
- package/dest/sparse_tree/sparse_tree.d.ts +9 -9
- package/dest/sparse_tree/sparse_tree.d.ts.map +1 -1
- package/dest/sparse_tree/sparse_tree.js +6 -4
- package/dest/standard_indexed_tree/standard_indexed_tree.d.ts +8 -6
- package/dest/standard_indexed_tree/standard_indexed_tree.d.ts.map +1 -1
- package/dest/standard_indexed_tree/standard_indexed_tree.js +5 -2
- package/dest/standard_tree/standard_tree.d.ts +9 -8
- package/dest/standard_tree/standard_tree.d.ts.map +1 -1
- package/dest/standard_tree/standard_tree.js +5 -3
- package/dest/tree_base.d.ts +19 -10
- package/dest/tree_base.d.ts.map +1 -1
- package/dest/tree_base.js +20 -3
- package/package.json +5 -5
- package/src/hasher_with_stats.ts +1 -1
- package/src/interfaces/append_only_tree.ts +8 -4
- package/src/interfaces/indexed_tree.ts +13 -4
- package/src/interfaces/merkle_tree.ts +6 -5
- package/src/interfaces/update_only_tree.ts +8 -4
- package/src/load_tree.ts +16 -6
- package/src/new_tree.ts +8 -6
- package/src/pedersen.ts +1 -1
- package/src/sha_256.ts +1 -1
- package/src/snapshots/append_only_snapshot.ts +28 -16
- package/src/snapshots/base_full_snapshot.ts +14 -11
- package/src/snapshots/full_snapshot.ts +14 -7
- package/src/snapshots/indexed_tree_snapshot.ts +10 -10
- package/src/snapshots/snapshot_builder.ts +9 -8
- package/src/snapshots/snapshot_builder_test_suite.ts +14 -8
- package/src/sparse_tree/sparse_tree.ts +13 -10
- package/src/standard_indexed_tree/standard_indexed_tree.ts +19 -9
- package/src/standard_tree/standard_tree.ts +13 -11
- package/src/tree_base.ts +27 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasher_with_stats.d.ts","sourceRoot":"","sources":["../src/hasher_with_stats.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"hasher_with_stats.d.ts","sourceRoot":"","sources":["../src/hasher_with_stats.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAItD;;GAEG;AACH,qBAAa,eAAgB,YAAW,MAAM;IAC5C,SAAS,SAAK;IACd,eAAe,SAAK;IACpB,aAAa,2CAAqB;IAClC,mBAAmB,2CAAqB;IAExC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;gBAErB,MAAM,EAAE,MAAM;IAiB1B,KAAK;;;;;;IAUL,KAAK;CAON"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { type Bufferable } from '@aztec/foundation/serialize';
|
|
3
|
+
import { type TreeSnapshot, type TreeSnapshotBuilder } from '../snapshots/snapshot_builder.js';
|
|
4
|
+
import { type MerkleTree } from './merkle_tree.js';
|
|
4
5
|
/**
|
|
5
6
|
* A Merkle tree that supports only appending leaves and not updating existing leaves.
|
|
6
7
|
*/
|
|
7
|
-
export interface AppendOnlyTree extends MerkleTree
|
|
8
|
+
export interface AppendOnlyTree<T extends Bufferable = Buffer> extends MerkleTree<T>, TreeSnapshotBuilder<TreeSnapshot<T>> {
|
|
8
9
|
/**
|
|
9
10
|
* Appends a set of leaf values to the tree.
|
|
10
11
|
* @param leaves - The set of leaves to be appended.
|
|
11
12
|
*/
|
|
12
|
-
appendLeaves(leaves:
|
|
13
|
+
appendLeaves(leaves: T[]): Promise<void>;
|
|
13
14
|
}
|
|
14
15
|
//# sourceMappingURL=append_only_tree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"append_only_tree.d.ts","sourceRoot":"","sources":["../../src/interfaces/append_only_tree.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"append_only_tree.d.ts","sourceRoot":"","sources":["../../src/interfaces/append_only_tree.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC/F,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,UAAU,GAAG,MAAM,CAC3D,SAAQ,UAAU,CAAC,CAAC,CAAC,EACnB,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACtC;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { SiblingPath } from '@aztec/circuit-types';
|
|
3
|
-
import { IndexedTreeLeaf, IndexedTreeLeafPreimage } from '@aztec/foundation/trees';
|
|
4
|
-
import {
|
|
2
|
+
import { type SiblingPath } from '@aztec/circuit-types';
|
|
3
|
+
import { type IndexedTreeLeaf, type IndexedTreeLeafPreimage } from '@aztec/foundation/trees';
|
|
4
|
+
import { type IndexedTreeSnapshot, type TreeSnapshot, type TreeSnapshotBuilder } from '../snapshots/snapshot_builder.js';
|
|
5
|
+
import { type AppendOnlyTree } from './append_only_tree.js';
|
|
6
|
+
import { type MerkleTree } from './merkle_tree.js';
|
|
5
7
|
/**
|
|
6
8
|
* Factory for creating leaf preimages.
|
|
7
9
|
*/
|
|
@@ -69,7 +71,7 @@ export interface BatchInsertionResult<TreeHeight extends number, SubtreeSiblingP
|
|
|
69
71
|
/**
|
|
70
72
|
* Indexed merkle tree.
|
|
71
73
|
*/
|
|
72
|
-
export interface IndexedTree extends AppendOnlyTree {
|
|
74
|
+
export interface IndexedTree extends MerkleTree<Buffer>, TreeSnapshotBuilder<IndexedTreeSnapshot>, Omit<AppendOnlyTree<Buffer>, keyof TreeSnapshotBuilder<TreeSnapshot<Buffer>>> {
|
|
73
75
|
/**
|
|
74
76
|
* Finds the index of the largest leaf whose value is less than or equal to the provided value.
|
|
75
77
|
* @param newValue - The new value to be inserted into the tree.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexed_tree.d.ts","sourceRoot":"","sources":["../../src/interfaces/indexed_tree.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"indexed_tree.d.ts","sourceRoot":"","sources":["../../src/interfaces/indexed_tree.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACzB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,uBAAuB,CAAC;IAC7F;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB,CAAC;IACpD;;OAEG;IACH,KAAK,IAAI,uBAAuB,CAAC;IACjC;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,uBAAuB,GAAG,uBAAuB,CAAC;CACnE;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM;IAClD;;OAEG;IACH,YAAY,EAAE,uBAAuB,CAAC;IACtC;;OAEG;IACH,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,UAAU,SAAS,MAAM,EAAE,wBAAwB,SAAS,MAAM;IACtG;;OAEG;IACH,oBAAoB,CAAC,EAAE,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;IACxD;;OAEG;IACH,qBAAqB,EAAE,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAC7D;;OAEG;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B;;OAEG;IACH,sBAAsB,EAAE,MAAM,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,WACf,SAAQ,UAAU,CAAC,MAAM,CAAC,EACxB,mBAAmB,CAAC,mBAAmB,CAAC,EACxC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,mBAAmB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/E;;;;;OAKG;IACH,sBAAsB,CACpB,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,OAAO,GAEzB;QACE;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd;;WAEG;QACH,cAAc,EAAE,OAAO,CAAC;KACzB,GACD,SAAS,CAAC;IAEd;;;;;OAKG;IACH,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,GAAG,uBAAuB,GAAG,SAAS,CAAC;IAE3G;;;;;OAKG;IACH,WAAW,CAAC,UAAU,SAAS,MAAM,EAAE,aAAa,SAAS,MAAM,EAAE,wBAAwB,SAAS,MAAM,EAC1G,MAAM,EAAE,MAAM,EAAE,EAChB,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,OAAO,GAC1B,OAAO,CAAC,oBAAoB,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC,CAAC;CACxE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { SiblingPath } from '@aztec/circuit-types';
|
|
2
|
+
import { type SiblingPath } from '@aztec/circuit-types';
|
|
3
|
+
import { type Bufferable } from '@aztec/foundation/serialize';
|
|
3
4
|
/**
|
|
4
5
|
* Defines the interface for a source of sibling paths.
|
|
5
6
|
*/
|
|
@@ -14,7 +15,7 @@ export interface SiblingPathSource {
|
|
|
14
15
|
/**
|
|
15
16
|
* Defines the interface for a Merkle tree.
|
|
16
17
|
*/
|
|
17
|
-
export interface MerkleTree extends SiblingPathSource {
|
|
18
|
+
export interface MerkleTree<T extends Bufferable = Buffer> extends SiblingPathSource {
|
|
18
19
|
/**
|
|
19
20
|
* Returns the current root of the tree.
|
|
20
21
|
* @param includeUncommitted - Set to true to include uncommitted updates in the calculated root.
|
|
@@ -42,14 +43,14 @@ export interface MerkleTree extends SiblingPathSource {
|
|
|
42
43
|
* @param index - The index of the leaf value to be returned.
|
|
43
44
|
* @param includeUncommitted - Set to true to include uncommitted updates in the data set.
|
|
44
45
|
*/
|
|
45
|
-
getLeafValue(index: bigint, includeUncommitted: boolean):
|
|
46
|
+
getLeafValue(index: bigint, includeUncommitted: boolean): T | undefined;
|
|
46
47
|
/**
|
|
47
48
|
* Returns the index of a leaf given its value, or undefined if no leaf with that value is found.
|
|
48
49
|
* @param leaf - The leaf value to look for.
|
|
49
50
|
* @param includeUncommitted - Indicates whether to include uncommitted data.
|
|
50
51
|
* @returns The index of the first leaf found with a given value (undefined if not found).
|
|
51
52
|
*/
|
|
52
|
-
findLeafIndex(leaf:
|
|
53
|
+
findLeafIndex(leaf: T, includeUncommitted: boolean): bigint | undefined;
|
|
53
54
|
/**
|
|
54
55
|
* Returns the first index containing a leaf value after `startIndex`.
|
|
55
56
|
* @param leaf - The leaf value to look for.
|
|
@@ -57,6 +58,6 @@ export interface MerkleTree extends SiblingPathSource {
|
|
|
57
58
|
* @param includeUncommitted - Indicates whether to include uncommitted data.
|
|
58
59
|
* @returns The index of the first leaf found with a given value (undefined if not found).
|
|
59
60
|
*/
|
|
60
|
-
findLeafIndexAfter(leaf:
|
|
61
|
+
findLeafIndexAfter(leaf: T, startIndex: bigint, includeUncommitted: boolean): bigint | undefined;
|
|
61
62
|
}
|
|
62
63
|
//# sourceMappingURL=merkle_tree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merkle_tree.d.ts","sourceRoot":"","sources":["../../src/interfaces/merkle_tree.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"merkle_tree.d.ts","sourceRoot":"","sources":["../../src/interfaces/merkle_tree.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;CACvG;AAED;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,UAAU,GAAG,MAAM,CAAE,SAAQ,iBAAiB;IAClF;;;OAGG;IACH,OAAO,CAAC,kBAAkB,EAAE,OAAO,GAAG,MAAM,CAAC;IAE7C;;;OAGG;IACH,YAAY,CAAC,kBAAkB,EAAE,OAAO,GAAG,MAAM,CAAC;IAElD;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;OAEG;IACH,QAAQ,IAAI,MAAM,CAAC;IAEnB;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC;IAExE;;;;;OAKG;IACH,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,kBAAkB,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAExE;;;;;;OAMG;IACH,kBAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;CAClG"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { type Bufferable } from '@aztec/foundation/serialize';
|
|
3
|
+
import { type TreeSnapshot, type TreeSnapshotBuilder } from '../snapshots/snapshot_builder.js';
|
|
4
|
+
import { type MerkleTree } from './merkle_tree.js';
|
|
4
5
|
/**
|
|
5
6
|
* A Merkle tree that supports updates at arbitrary indices but not appending.
|
|
6
7
|
*/
|
|
7
|
-
export interface UpdateOnlyTree extends MerkleTree
|
|
8
|
+
export interface UpdateOnlyTree<T extends Bufferable = Buffer> extends MerkleTree<T>, TreeSnapshotBuilder<TreeSnapshot<T>> {
|
|
8
9
|
/**
|
|
9
10
|
* Updates a leaf at a given index in the tree.
|
|
10
11
|
* @param leaf - The leaf value to be updated.
|
|
11
12
|
* @param index - The leaf to be updated.
|
|
12
13
|
*/
|
|
13
|
-
updateLeaf(leaf:
|
|
14
|
+
updateLeaf(leaf: T, index: bigint): Promise<void>;
|
|
14
15
|
}
|
|
15
16
|
//# sourceMappingURL=update_only_tree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update_only_tree.d.ts","sourceRoot":"","sources":["../../src/interfaces/update_only_tree.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"update_only_tree.d.ts","sourceRoot":"","sources":["../../src/interfaces/update_only_tree.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC/F,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,UAAU,GAAG,MAAM,CAC3D,SAAQ,UAAU,CAAC,CAAC,CAAC,EACnB,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACtC;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD"}
|
package/dest/load_tree.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { type Bufferable, type FromBuffer } from '@aztec/foundation/serialize';
|
|
3
|
+
import { type AztecKVStore } from '@aztec/kv-store';
|
|
4
|
+
import { type Hasher } from '@aztec/types/interfaces';
|
|
5
|
+
import { type TreeBase } from './tree_base.js';
|
|
5
6
|
/**
|
|
6
7
|
* Creates a new tree and sets its root, depth and size based on the meta data which are associated with the name.
|
|
7
8
|
* @param c - The class of the tree to be instantiated.
|
|
@@ -10,5 +11,5 @@ import { TreeBase } from './tree_base.js';
|
|
|
10
11
|
* @param name - Name of the tree.
|
|
11
12
|
* @returns The newly created tree.
|
|
12
13
|
*/
|
|
13
|
-
export declare function loadTree<T extends TreeBase
|
|
14
|
+
export declare function loadTree<T extends TreeBase<Bufferable>, D extends FromBuffer<Bufferable>>(c: new (store: AztecKVStore, hasher: Hasher, name: string, depth: number, size: bigint, deserializer: D, root: Buffer) => T, store: AztecKVStore, hasher: Hasher, name: string, deserializer: D): Promise<T>;
|
|
14
15
|
//# sourceMappingURL=load_tree.d.ts.map
|
package/dest/load_tree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load_tree.d.ts","sourceRoot":"","sources":["../src/load_tree.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"load_tree.d.ts","sourceRoot":"","sources":["../src/load_tree.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,KAAK,QAAQ,EAAe,MAAM,gBAAgB,CAAC;AAE5D;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,UAAU,CAAC,UAAU,CAAC,EACvF,CAAC,EAAE,KACD,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,CAAC,EACf,IAAI,EAAE,MAAM,KACT,CAAC,EACN,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAIZ"}
|
package/dest/load_tree.js
CHANGED
|
@@ -7,9 +7,9 @@ import { getTreeMeta } from './tree_base.js';
|
|
|
7
7
|
* @param name - Name of the tree.
|
|
8
8
|
* @returns The newly created tree.
|
|
9
9
|
*/
|
|
10
|
-
export function loadTree(c, store, hasher, name) {
|
|
10
|
+
export function loadTree(c, store, hasher, name, deserializer) {
|
|
11
11
|
const { root, depth, size } = getTreeMeta(store, name);
|
|
12
|
-
const tree = new c(store, hasher, name, depth, size, root);
|
|
12
|
+
const tree = new c(store, hasher, name, depth, size, deserializer, root);
|
|
13
13
|
return Promise.resolve(tree);
|
|
14
14
|
}
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZF90cmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRfdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQWlCLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUN0QixDQVFNLEVBQ04sS0FBbUIsRUFDbkIsTUFBYyxFQUNkLElBQVksRUFDWixZQUFlO0lBRWYsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6RSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQyJ9
|
package/dest/new_tree.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { type Bufferable, type FromBuffer } from '@aztec/foundation/serialize';
|
|
2
|
+
import { type AztecKVStore } from '@aztec/kv-store';
|
|
3
|
+
import { type Hasher } from '@aztec/types/interfaces';
|
|
4
|
+
import { type TreeBase } from './tree_base.js';
|
|
4
5
|
/**
|
|
5
6
|
* Creates a new tree.
|
|
6
7
|
* @param c - The class of the tree to be instantiated.
|
|
@@ -11,5 +12,5 @@ import { TreeBase } from './tree_base.js';
|
|
|
11
12
|
* @param prefilledSize - A number of leaves that are prefilled with values.
|
|
12
13
|
* @returns The newly created tree.
|
|
13
14
|
*/
|
|
14
|
-
export declare function newTree<T extends TreeBase
|
|
15
|
+
export declare function newTree<T extends TreeBase<Bufferable>, D extends FromBuffer<Bufferable>>(c: new (store: AztecKVStore, hasher: Hasher, name: string, depth: number, size: bigint, deserializer: D) => T, store: AztecKVStore, hasher: Hasher, name: string, deserializer: D, depth: number, prefilledSize?: number): Promise<T>;
|
|
15
16
|
//# sourceMappingURL=new_tree.d.ts.map
|
package/dest/new_tree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new_tree.d.ts","sourceRoot":"","sources":["../src/new_tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"new_tree.d.ts","sourceRoot":"","sources":["../src/new_tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;;;;;;GASG;AACH,wBAAsB,OAAO,CAAC,CAAC,SAAS,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,UAAU,CAAC,UAAU,CAAC,EAC5F,CAAC,EAAE,KAAK,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,KAAK,CAAC,EAC7G,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,CAAC,EACf,KAAK,EAAE,MAAM,EACb,aAAa,SAAI,GAChB,OAAO,CAAC,CAAC,CAAC,CAIZ"}
|
package/dest/new_tree.js
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
* @param prefilledSize - A number of leaves that are prefilled with values.
|
|
9
9
|
* @returns The newly created tree.
|
|
10
10
|
*/
|
|
11
|
-
export async function newTree(c, store, hasher, name, depth, prefilledSize = 1) {
|
|
12
|
-
const tree = new c(store, hasher, name, depth, 0n);
|
|
11
|
+
export async function newTree(c, store, hasher, name, deserializer, depth, prefilledSize = 1) {
|
|
12
|
+
const tree = new c(store, hasher, name, depth, 0n, deserializer);
|
|
13
13
|
await tree.init(prefilledSize);
|
|
14
14
|
return tree;
|
|
15
15
|
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3X3RyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV3X3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUE7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLENBQzNCLENBQTZHLEVBQzdHLEtBQW1CLEVBQ25CLE1BQWMsRUFDZCxJQUFZLEVBQ1osWUFBZSxFQUNmLEtBQWEsRUFDYixhQUFhLEdBQUcsQ0FBQztJQUVqQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvQixPQUFPLElBQUksQ0FBQztBQUNkLENBQUMifQ==
|
package/dest/pedersen.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { Hasher } from '@aztec/types/interfaces';
|
|
2
|
+
import { type Hasher } from '@aztec/types/interfaces';
|
|
3
3
|
/**
|
|
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
|
package/dest/pedersen.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pedersen.d.ts","sourceRoot":"","sources":["../src/pedersen.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"pedersen.d.ts","sourceRoot":"","sources":["../src/pedersen.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD;;;;GAIG;AACH,qBAAa,QAAS,YAAW,MAAM;IAK9B,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM;IAQ9C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;CAG5C"}
|
package/dest/sha_256.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { Hasher } from '@aztec/types/interfaces';
|
|
2
|
+
import { type Hasher } from '@aztec/types/interfaces';
|
|
3
3
|
/**
|
|
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
|
package/dest/sha_256.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sha_256.d.ts","sourceRoot":"","sources":["../src/sha_256.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"sha_256.d.ts","sourceRoot":"","sources":["../src/sha_256.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD;;;;GAIG;AACH,qBAAa,MAAO,YAAW,MAAM;IAK5B,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM;IAQ9C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;CAG5C;AAED;;;;GAIG;AACH,qBAAa,WAAY,YAAW,MAAM;IAKjC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM;IAQ9C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;CAG5C"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { type Bufferable, type FromBuffer } from '@aztec/foundation/serialize';
|
|
2
|
+
import { type AztecKVStore } from '@aztec/kv-store';
|
|
3
|
+
import { type Hasher } from '@aztec/types/interfaces';
|
|
4
|
+
import { type AppendOnlyTree } from '../interfaces/append_only_tree.js';
|
|
5
|
+
import { type TreeBase } from '../tree_base.js';
|
|
6
|
+
import { type TreeSnapshot, type TreeSnapshotBuilder } from './snapshot_builder.js';
|
|
6
7
|
/**
|
|
7
8
|
* A more space-efficient way of storing snapshots of AppendOnlyTrees that trades space need for slower
|
|
8
9
|
* sibling path reads.
|
|
@@ -18,13 +19,14 @@ import { TreeSnapshot, TreeSnapshotBuilder } from './snapshot_builder.js';
|
|
|
18
19
|
* Best case: O(H) database reads + O(1) hashes
|
|
19
20
|
* Worst case: O(H) database reads + O(H) hashes
|
|
20
21
|
*/
|
|
21
|
-
export declare class AppendOnlySnapshotBuilder implements TreeSnapshotBuilder {
|
|
22
|
+
export declare class AppendOnlySnapshotBuilder<T extends Bufferable> implements TreeSnapshotBuilder<TreeSnapshot<T>> {
|
|
22
23
|
#private;
|
|
23
24
|
private db;
|
|
24
25
|
private tree;
|
|
25
26
|
private hasher;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
private deserializer;
|
|
28
|
+
constructor(db: AztecKVStore, tree: TreeBase<T> & AppendOnlyTree<T>, hasher: Hasher, deserializer: FromBuffer<T>);
|
|
29
|
+
getSnapshot(block: number): Promise<TreeSnapshot<T>>;
|
|
30
|
+
snapshot(block: number): Promise<TreeSnapshot<T>>;
|
|
29
31
|
}
|
|
30
32
|
//# sourceMappingURL=append_only_snapshot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"append_only_snapshot.d.ts","sourceRoot":"","sources":["../../src/snapshots/append_only_snapshot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"append_only_snapshot.d.ts","sourceRoot":"","sources":["../../src/snapshots/append_only_snapshot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAqB,MAAM,6BAA6B,CAAC;AAClG,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAkBpF;;;;;;;;;;;;;;GAcG;AACH,qBAAa,yBAAyB,CAAC,CAAC,SAAS,UAAU,CAAE,YAAW,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;;IAMxG,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;gBAHZ,EAAE,EAAE,YAAY,EAChB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,EACrC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IAQrC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAqBpD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CA4ElD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
var _AppendOnlySnapshotBuilder_instances, _AppendOnlySnapshotBuilder_nodeValue, _AppendOnlySnapshotBuilder_nodeLastModifiedByBlock, _AppendOnlySnapshotBuilder_snapshotMetadata, _AppendOnlySnapshotBuilder_getSnapshotMeta, _AppendOnlySnapshot_instances, _AppendOnlySnapshot_getHistoricalNodeValue, _AppendOnlySnapshot_getBlockNumberThatModifiedNode;
|
|
2
2
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
3
|
import { SiblingPath } from '@aztec/circuit-types';
|
|
4
|
+
import { serializeToBuffer } from '@aztec/foundation/serialize';
|
|
4
5
|
// stores the last block that modified this node
|
|
5
6
|
const nodeModifiedAtBlockKey = (level, index) => `node:${level}:${index}:modifiedAtBlock`;
|
|
6
7
|
// stores the value of the node at the above block
|
|
@@ -21,11 +22,12 @@ const historicalNodeKey = (level, index) => `node:${level}:${index}:value`;
|
|
|
21
22
|
* Worst case: O(H) database reads + O(H) hashes
|
|
22
23
|
*/
|
|
23
24
|
export class AppendOnlySnapshotBuilder {
|
|
24
|
-
constructor(db, tree, hasher) {
|
|
25
|
+
constructor(db, tree, hasher, deserializer) {
|
|
25
26
|
_AppendOnlySnapshotBuilder_instances.add(this);
|
|
26
27
|
this.db = db;
|
|
27
28
|
this.tree = tree;
|
|
28
29
|
this.hasher = hasher;
|
|
30
|
+
this.deserializer = deserializer;
|
|
29
31
|
_AppendOnlySnapshotBuilder_nodeValue.set(this, void 0);
|
|
30
32
|
_AppendOnlySnapshotBuilder_nodeLastModifiedByBlock.set(this, void 0);
|
|
31
33
|
_AppendOnlySnapshotBuilder_snapshotMetadata.set(this, void 0);
|
|
@@ -39,14 +41,14 @@ export class AppendOnlySnapshotBuilder {
|
|
|
39
41
|
if (typeof meta === 'undefined') {
|
|
40
42
|
return Promise.reject(new Error(`Snapshot for tree ${this.tree.getName()} at block ${block} does not exist`));
|
|
41
43
|
}
|
|
42
|
-
return Promise.resolve(new AppendOnlySnapshot(__classPrivateFieldGet(this, _AppendOnlySnapshotBuilder_nodeValue, "f"), __classPrivateFieldGet(this, _AppendOnlySnapshotBuilder_nodeLastModifiedByBlock, "f"), block, meta.numLeaves, meta.root, this.tree, this.hasher));
|
|
44
|
+
return Promise.resolve(new AppendOnlySnapshot(__classPrivateFieldGet(this, _AppendOnlySnapshotBuilder_nodeValue, "f"), __classPrivateFieldGet(this, _AppendOnlySnapshotBuilder_nodeLastModifiedByBlock, "f"), block, meta.numLeaves, meta.root, this.tree, this.hasher, this.deserializer));
|
|
43
45
|
}
|
|
44
46
|
snapshot(block) {
|
|
45
47
|
return this.db.transaction(() => {
|
|
46
48
|
const meta = __classPrivateFieldGet(this, _AppendOnlySnapshotBuilder_instances, "m", _AppendOnlySnapshotBuilder_getSnapshotMeta).call(this, block);
|
|
47
49
|
if (typeof meta !== 'undefined') {
|
|
48
50
|
// no-op, we already have a snapshot
|
|
49
|
-
return new AppendOnlySnapshot(__classPrivateFieldGet(this, _AppendOnlySnapshotBuilder_nodeValue, "f"), __classPrivateFieldGet(this, _AppendOnlySnapshotBuilder_nodeLastModifiedByBlock, "f"), block, meta.numLeaves, meta.root, this.tree, this.hasher);
|
|
51
|
+
return new AppendOnlySnapshot(__classPrivateFieldGet(this, _AppendOnlySnapshotBuilder_nodeValue, "f"), __classPrivateFieldGet(this, _AppendOnlySnapshotBuilder_nodeLastModifiedByBlock, "f"), block, meta.numLeaves, meta.root, this.tree, this.hasher, this.deserializer);
|
|
50
52
|
}
|
|
51
53
|
const root = this.tree.getRoot(false);
|
|
52
54
|
const depth = this.tree.getDepth();
|
|
@@ -84,7 +86,7 @@ export class AppendOnlySnapshotBuilder {
|
|
|
84
86
|
numLeaves,
|
|
85
87
|
root,
|
|
86
88
|
});
|
|
87
|
-
return new AppendOnlySnapshot(__classPrivateFieldGet(this, _AppendOnlySnapshotBuilder_nodeValue, "f"), __classPrivateFieldGet(this, _AppendOnlySnapshotBuilder_nodeLastModifiedByBlock, "f"), block, numLeaves, root, this.tree, this.hasher);
|
|
89
|
+
return new AppendOnlySnapshot(__classPrivateFieldGet(this, _AppendOnlySnapshotBuilder_nodeValue, "f"), __classPrivateFieldGet(this, _AppendOnlySnapshotBuilder_nodeLastModifiedByBlock, "f"), block, numLeaves, root, this.tree, this.hasher, this.deserializer);
|
|
88
90
|
});
|
|
89
91
|
}
|
|
90
92
|
}
|
|
@@ -95,7 +97,7 @@ _AppendOnlySnapshotBuilder_nodeValue = new WeakMap(), _AppendOnlySnapshotBuilder
|
|
|
95
97
|
* a
|
|
96
98
|
*/
|
|
97
99
|
class AppendOnlySnapshot {
|
|
98
|
-
constructor(nodes, nodeHistory, block, leafCount, historicalRoot, tree, hasher) {
|
|
100
|
+
constructor(nodes, nodeHistory, block, leafCount, historicalRoot, tree, hasher, deserializer) {
|
|
99
101
|
_AppendOnlySnapshot_instances.add(this);
|
|
100
102
|
this.nodes = nodes;
|
|
101
103
|
this.nodeHistory = nodeHistory;
|
|
@@ -104,6 +106,7 @@ class AppendOnlySnapshot {
|
|
|
104
106
|
this.historicalRoot = historicalRoot;
|
|
105
107
|
this.tree = tree;
|
|
106
108
|
this.hasher = hasher;
|
|
109
|
+
this.deserializer = deserializer;
|
|
107
110
|
}
|
|
108
111
|
getSiblingPath(index) {
|
|
109
112
|
const path = [];
|
|
@@ -138,7 +141,8 @@ class AppendOnlySnapshot {
|
|
|
138
141
|
}
|
|
139
142
|
// leaf was set some time in the past
|
|
140
143
|
if (blockNumber <= this.block) {
|
|
141
|
-
|
|
144
|
+
const val = this.nodes.get(historicalNodeKey(leafLevel, index));
|
|
145
|
+
return val ? this.deserializer.fromBuffer(val) : undefined;
|
|
142
146
|
}
|
|
143
147
|
// leaf has been set but in a block in the future
|
|
144
148
|
return undefined;
|
|
@@ -147,10 +151,11 @@ class AppendOnlySnapshot {
|
|
|
147
151
|
return this.findLeafIndexAfter(value, 0n);
|
|
148
152
|
}
|
|
149
153
|
findLeafIndexAfter(value, startIndex) {
|
|
154
|
+
const valueBuffer = serializeToBuffer(value);
|
|
150
155
|
const numLeaves = this.getNumLeaves();
|
|
151
156
|
for (let i = startIndex; i < numLeaves; i++) {
|
|
152
157
|
const currentValue = this.getLeafValue(i);
|
|
153
|
-
if (currentValue && currentValue.equals(
|
|
158
|
+
if (currentValue && serializeToBuffer(currentValue).equals(valueBuffer)) {
|
|
154
159
|
return i;
|
|
155
160
|
}
|
|
156
161
|
}
|
|
@@ -189,4 +194,4 @@ _AppendOnlySnapshot_instances = new WeakSet(), _AppendOnlySnapshot_getHistorical
|
|
|
189
194
|
}, _AppendOnlySnapshot_getBlockNumberThatModifiedNode = function _AppendOnlySnapshot_getBlockNumberThatModifiedNode(level, index) {
|
|
190
195
|
return this.nodeHistory.get(nodeModifiedAtBlockKey(level, index));
|
|
191
196
|
};
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kX29ubHlfc25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc25hcHNob3RzL2FwcGVuZF9vbmx5X3NuYXBzaG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBb0MsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQVFsRyxnREFBZ0Q7QUFDaEQsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEtBQWEsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLEtBQUssa0JBQWtCLENBQUM7QUFFMUcsa0RBQWtEO0FBQ2xELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFhLEVBQUUsS0FBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEtBQUssSUFBSSxLQUFLLFFBQVEsQ0FBQztBQVkzRjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sT0FBTyx5QkFBeUI7SUFLcEMsWUFDVSxFQUFnQixFQUNoQixJQUFxQyxFQUNyQyxNQUFjLEVBQ2QsWUFBMkI7O1FBSDNCLE9BQUUsR0FBRixFQUFFLENBQWM7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBaUM7UUFDckMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBUnJDLHVEQUFtRTtRQUNuRSxxRUFBc0Y7UUFDdEYsOERBQXNEO1FBUXBELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQyx1QkFBQSxJQUFJLHdDQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLFFBQVEsT0FBTyxDQUFDLE1BQUEsQ0FBQztRQUN0RSx1QkFBQSxJQUFJLHNEQUE0QixFQUFFLENBQUMsT0FBTyxDQUFDLHVCQUF1QixRQUFRLFFBQVEsQ0FBQyxNQUFBLENBQUM7UUFDcEYsdUJBQUEsSUFBSSwrQ0FBcUIs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
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
2
|
import { SiblingPath } from '@aztec/circuit-types';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { type Bufferable, type FromBuffer } from '@aztec/foundation/serialize';
|
|
4
|
+
import { type AztecKVStore, type AztecMap } from '@aztec/kv-store';
|
|
5
|
+
import { type TreeBase } from '../tree_base.js';
|
|
6
|
+
import { type TreeSnapshot, type TreeSnapshotBuilder } from './snapshot_builder.js';
|
|
6
7
|
/**
|
|
7
8
|
* Metadata for a snapshot, per block
|
|
8
9
|
*/
|
|
@@ -28,7 +29,7 @@ type SnapshotMetadata = {
|
|
|
28
29
|
* Worst case space complexity: O(N * M)
|
|
29
30
|
* Sibling path access: O(H) database reads
|
|
30
31
|
*/
|
|
31
|
-
export declare abstract class BaseFullTreeSnapshotBuilder<T extends TreeBase
|
|
32
|
+
export declare abstract class BaseFullTreeSnapshotBuilder<T extends TreeBase<Bufferable>, S extends TreeSnapshot<Bufferable>> implements TreeSnapshotBuilder<S> {
|
|
32
33
|
#private;
|
|
33
34
|
protected db: AztecKVStore;
|
|
34
35
|
protected tree: T;
|
|
@@ -43,21 +44,22 @@ export declare abstract class BaseFullTreeSnapshotBuilder<T extends TreeBase, S
|
|
|
43
44
|
/**
|
|
44
45
|
* A source of sibling paths from a snapshot tree
|
|
45
46
|
*/
|
|
46
|
-
export declare class BaseFullTreeSnapshot implements TreeSnapshot {
|
|
47
|
+
export declare class BaseFullTreeSnapshot<T extends Bufferable> implements TreeSnapshot<T> {
|
|
47
48
|
#private;
|
|
48
49
|
protected db: AztecMap<string, [Buffer, Buffer]>;
|
|
49
50
|
protected historicRoot: Buffer;
|
|
50
51
|
protected numLeaves: bigint;
|
|
51
|
-
protected tree: TreeBase
|
|
52
|
-
|
|
52
|
+
protected tree: TreeBase<T>;
|
|
53
|
+
protected deserializer: FromBuffer<T>;
|
|
54
|
+
constructor(db: AztecMap<string, [Buffer, Buffer]>, historicRoot: Buffer, numLeaves: bigint, tree: TreeBase<T>, deserializer: FromBuffer<T>);
|
|
53
55
|
getSiblingPath<N extends number>(index: bigint): SiblingPath<N>;
|
|
54
|
-
getLeafValue(index: bigint):
|
|
56
|
+
getLeafValue(index: bigint): T | undefined;
|
|
55
57
|
getDepth(): number;
|
|
56
58
|
getRoot(): Buffer;
|
|
57
59
|
getNumLeaves(): bigint;
|
|
58
60
|
protected pathFromRootToLeaf(leafIndex: bigint): Generator<Buffer[], void, unknown>;
|
|
59
|
-
findLeafIndex(value:
|
|
60
|
-
findLeafIndexAfter(value:
|
|
61
|
+
findLeafIndex(value: T): bigint | undefined;
|
|
62
|
+
findLeafIndexAfter(value: T, startIndex: bigint): bigint | undefined;
|
|
61
63
|
}
|
|
62
64
|
export {};
|
|
63
65
|
//# sourceMappingURL=base_full_snapshot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base_full_snapshot.d.ts","sourceRoot":"","sources":["../../src/snapshots/base_full_snapshot.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"base_full_snapshot.d.ts","sourceRoot":"","sources":["../../src/snapshots/base_full_snapshot.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAqB,MAAM,6BAA6B,CAAC;AAClG,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEpF;;GAEG;AACH,KAAK,gBAAgB,GAAG;IACtB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,8BAAsB,2BAA2B,CAAC,CAAC,SAAS,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,YAAY,CAAC,UAAU,CAAC,CAClH,YAAW,mBAAmB,CAAC,CAAC,CAAC;;IAKrB,SAAS,CAAC,EAAE,EAAE,YAAY;IAAE,SAAS,CAAC,IAAI,EAAE,CAAC;IAHzD,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,SAAS,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;gBAEzC,EAAE,EAAE,YAAY,EAAY,IAAI,EAAE,CAAC;IAKzD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAwDnC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAEzD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAUxC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC;CAKpE;AAED;;GAEG;AACH,qBAAa,oBAAoB,CAAC,CAAC,SAAS,UAAU,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;;IAE9E,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,SAAS,CAAC,YAAY,EAAE,MAAM;IAC9B,SAAS,CAAC,SAAS,EAAE,MAAM;IAC3B,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3B,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;gBAJ3B,EAAE,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EACjB,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IAGvC,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;IAc/D,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAS1C,QAAQ,IAAI,MAAM;IAIlB,OAAO,IAAI,MAAM;IAIjB,YAAY,IAAI,MAAM;IAItB,SAAS,CAAE,kBAAkB,CAAC,SAAS,EAAE,MAAM;IAwC/C,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,GAAG,SAAS;IAIpC,kBAAkB,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAW5E"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
var _BaseFullTreeSnapshotBuilder_instances, _BaseFullTreeSnapshotBuilder_getSnapshotMeta, _BaseFullTreeSnapshot_instances, _BaseFullTreeSnapshot_getPathFromRoot;
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
3
|
import { SiblingPath } from '@aztec/circuit-types';
|
|
4
|
+
import { serializeToBuffer } from '@aztec/foundation/serialize';
|
|
4
5
|
/**
|
|
5
6
|
* Builds a full snapshot of a tree. This implementation works for any Merkle tree and stores
|
|
6
7
|
* it in a database in a similar way to how a tree is stored in memory, using pointers.
|
|
@@ -87,12 +88,13 @@ _BaseFullTreeSnapshotBuilder_instances = new WeakSet(), _BaseFullTreeSnapshotBui
|
|
|
87
88
|
* A source of sibling paths from a snapshot tree
|
|
88
89
|
*/
|
|
89
90
|
export class BaseFullTreeSnapshot {
|
|
90
|
-
constructor(db, historicRoot, numLeaves, tree) {
|
|
91
|
+
constructor(db, historicRoot, numLeaves, tree, deserializer) {
|
|
91
92
|
_BaseFullTreeSnapshot_instances.add(this);
|
|
92
93
|
this.db = db;
|
|
93
94
|
this.historicRoot = historicRoot;
|
|
94
95
|
this.numLeaves = numLeaves;
|
|
95
96
|
this.tree = tree;
|
|
97
|
+
this.deserializer = deserializer;
|
|
96
98
|
}
|
|
97
99
|
getSiblingPath(index) {
|
|
98
100
|
const siblings = [];
|
|
@@ -109,7 +111,7 @@ export class BaseFullTreeSnapshot {
|
|
|
109
111
|
for (const [node, _sibling] of this.pathFromRootToLeaf(index)) {
|
|
110
112
|
leafNode = node;
|
|
111
113
|
}
|
|
112
|
-
return leafNode;
|
|
114
|
+
return leafNode ? this.deserializer.fromBuffer(leafNode) : undefined;
|
|
113
115
|
}
|
|
114
116
|
getDepth() {
|
|
115
117
|
return this.tree.getDepth();
|
|
@@ -141,9 +143,10 @@ export class BaseFullTreeSnapshot {
|
|
|
141
143
|
}
|
|
142
144
|
findLeafIndexAfter(value, startIndex) {
|
|
143
145
|
const numLeaves = this.getNumLeaves();
|
|
146
|
+
const buffer = serializeToBuffer(value);
|
|
144
147
|
for (let i = startIndex; i < numLeaves; i++) {
|
|
145
148
|
const currentValue = this.getLeafValue(i);
|
|
146
|
-
if (currentValue && currentValue.equals(
|
|
149
|
+
if (currentValue && serializeToBuffer(currentValue).equals(buffer)) {
|
|
147
150
|
return i;
|
|
148
151
|
}
|
|
149
152
|
}
|
|
@@ -161,4 +164,4 @@ _BaseFullTreeSnapshot_instances = new WeakSet(), _BaseFullTreeSnapshot_getPathFr
|
|
|
161
164
|
path.reverse();
|
|
162
165
|
return path;
|
|
163
166
|
};
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV9mdWxsX3NuYXBzaG90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NuYXBzaG90cy9iYXNlX2Z1bGxfc25hcHNob3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFvQyxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBZ0JsRzs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLE9BQWdCLDJCQUEyQjtJQU0vQyxZQUFzQixFQUFnQixFQUFZLElBQU87O1FBQW5DLE9BQUUsR0FBRixFQUFFLENBQWM7UUFBWSxTQUFJLEdBQUosSUFBSSxDQUFHO1FBQ3ZELElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDOUIsTUFBTSxnQkFBZ0IsR0FBRyx1QkFBQSxJQUFJLDRGQUFpQixNQUFyQixJQUFJLEVBQWtCLEtBQUssQ0FBQyxDQUFDO1lBRXRELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5RSxDQUFDO1lBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsTUFBTSxTQUFTLEdBQUcsSUFB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
|