@aztec/merkle-tree 0.20.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/interfaces/indexed_tree.d.ts +30 -4
- package/dest/interfaces/indexed_tree.d.ts.map +1 -1
- package/dest/interfaces/merkle_tree.d.ts +2 -2
- package/dest/interfaces/merkle_tree.d.ts.map +1 -1
- package/dest/load_tree.d.ts +2 -2
- package/dest/load_tree.d.ts.map +1 -1
- package/dest/load_tree.js +6 -7
- package/dest/new_tree.d.ts +2 -2
- package/dest/new_tree.d.ts.map +1 -1
- package/dest/new_tree.js +3 -3
- package/dest/snapshots/append_only_snapshot.d.ts +2 -2
- package/dest/snapshots/append_only_snapshot.d.ts.map +1 -1
- package/dest/snapshots/append_only_snapshot.js +80 -91
- package/dest/snapshots/base_full_snapshot.d.ts +22 -10
- package/dest/snapshots/base_full_snapshot.d.ts.map +1 -1
- package/dest/snapshots/base_full_snapshot.js +64 -82
- package/dest/snapshots/full_snapshot.js +2 -2
- package/dest/snapshots/indexed_tree_snapshot.d.ts +5 -5
- package/dest/snapshots/indexed_tree_snapshot.d.ts.map +1 -1
- package/dest/snapshots/indexed_tree_snapshot.js +20 -18
- package/dest/snapshots/snapshot_builder.d.ts +6 -6
- package/dest/snapshots/snapshot_builder.d.ts.map +1 -1
- package/dest/snapshots/snapshot_builder_test_suite.js +8 -8
- package/dest/sparse_tree/sparse_tree.d.ts +1 -1
- package/dest/sparse_tree/sparse_tree.d.ts.map +1 -1
- package/dest/sparse_tree/sparse_tree.js +7 -6
- package/dest/standard_indexed_tree/standard_indexed_tree.d.ts +15 -38
- package/dest/standard_indexed_tree/standard_indexed_tree.d.ts.map +1 -1
- package/dest/standard_indexed_tree/standard_indexed_tree.js +51 -72
- package/dest/standard_indexed_tree/test/standard_indexed_tree_with_append.d.ts.map +1 -1
- package/dest/standard_indexed_tree/test/standard_indexed_tree_with_append.js +10 -9
- package/dest/standard_tree/standard_tree.d.ts +4 -4
- package/dest/standard_tree/standard_tree.d.ts.map +1 -1
- package/dest/standard_tree/standard_tree.js +12 -11
- package/dest/tree_base.d.ts +12 -10
- package/dest/tree_base.d.ts.map +1 -1
- package/dest/tree_base.js +40 -34
- package/package.json +5 -8
|
@@ -1,38 +1,13 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
2
|
import { IndexedTreeLeaf, IndexedTreeLeafPreimage } from '@aztec/foundation/trees';
|
|
3
|
+
import { AztecKVStore, AztecMap } from '@aztec/kv-store';
|
|
3
4
|
import { Hasher } from '@aztec/types/interfaces';
|
|
4
5
|
import { SiblingPath } from '@aztec/types/membership';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
6
|
+
import { BatchInsertionResult, IndexedTree, PreimageFactory } from '../interfaces/indexed_tree.js';
|
|
7
|
+
import { IndexedTreeSnapshot } from '../snapshots/snapshot_builder.js';
|
|
7
8
|
import { TreeBase } from '../tree_base.js';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
*/
|
|
11
|
-
export interface PreimageFactory {
|
|
12
|
-
/**
|
|
13
|
-
* Creates a new preimage from a leaf.
|
|
14
|
-
* @param leaf - Leaf to create a preimage from.
|
|
15
|
-
* @param nextKey - Next key of the leaf.
|
|
16
|
-
* @param nextIndex - Next index of the leaf.
|
|
17
|
-
*/
|
|
18
|
-
fromLeaf(leaf: IndexedTreeLeaf, nextKey: bigint, nextIndex: bigint): IndexedTreeLeafPreimage;
|
|
19
|
-
/**
|
|
20
|
-
* Creates a new preimage from a buffer.
|
|
21
|
-
* @param buffer - Buffer to create a preimage from.
|
|
22
|
-
*/
|
|
23
|
-
fromBuffer(buffer: Buffer): IndexedTreeLeafPreimage;
|
|
24
|
-
/**
|
|
25
|
-
* Creates an empty preimage.
|
|
26
|
-
*/
|
|
27
|
-
empty(): IndexedTreeLeafPreimage;
|
|
28
|
-
/**
|
|
29
|
-
* Creates a copy of a preimage.
|
|
30
|
-
* @param preimage - Preimage to be cloned.
|
|
31
|
-
*/
|
|
32
|
-
clone(preimage: IndexedTreeLeafPreimage): IndexedTreeLeafPreimage;
|
|
33
|
-
}
|
|
34
|
-
export declare const buildDbKeyForPreimage: (name: string, index: bigint) => string;
|
|
35
|
-
export declare const buildDbKeyForLeafIndex: (name: string, key: bigint) => string;
|
|
9
|
+
export declare const buildDbKeyForPreimage: (name: string, index: bigint) => `${string}:leaf_by_index:${string}`;
|
|
10
|
+
export declare const buildDbKeyForLeafIndex: (name: string, key: bigint) => `${string}:leaf_index_by_leaf_key:${string}`;
|
|
36
11
|
/**
|
|
37
12
|
* Factory for creating leaves.
|
|
38
13
|
*/
|
|
@@ -58,7 +33,9 @@ export declare class StandardIndexedTree extends TreeBase implements IndexedTree
|
|
|
58
33
|
protected cachedLeafPreimages: {
|
|
59
34
|
[key: string]: IndexedTreeLeafPreimage;
|
|
60
35
|
};
|
|
61
|
-
|
|
36
|
+
protected leaves: AztecMap<ReturnType<typeof buildDbKeyForPreimage>, Buffer>;
|
|
37
|
+
protected leafIndex: AztecMap<ReturnType<typeof buildDbKeyForLeafIndex>, bigint>;
|
|
38
|
+
constructor(store: AztecKVStore, hasher: Hasher, name: string, depth: number, size: bigint | undefined, leafPreimageFactory: PreimageFactory, leafFactory: LeafFactory, root?: Buffer);
|
|
62
39
|
/**
|
|
63
40
|
* Appends the given leaves to the tree.
|
|
64
41
|
* @param _leaves - The leaves to append.
|
|
@@ -82,14 +59,14 @@ export declare class StandardIndexedTree extends TreeBase implements IndexedTree
|
|
|
82
59
|
* @param includeUncommitted - Indicates whether to include uncommitted leaves in the computation.
|
|
83
60
|
* @returns The value of the leaf at the given index or undefined if the leaf is empty.
|
|
84
61
|
*/
|
|
85
|
-
getLeafValue(index: bigint, includeUncommitted: boolean):
|
|
62
|
+
getLeafValue(index: bigint, includeUncommitted: boolean): Buffer | undefined;
|
|
86
63
|
/**
|
|
87
64
|
* Finds the index of the largest leaf whose value is less than or equal to the provided value.
|
|
88
65
|
* @param newKey - The new key to be inserted into the tree.
|
|
89
66
|
* @param includeUncommitted - If true, the uncommitted changes are included in the search.
|
|
90
67
|
* @returns The found leaf index and a flag indicating if the corresponding leaf's value is equal to `newValue`.
|
|
91
68
|
*/
|
|
92
|
-
findIndexOfPreviousKey(newKey: bigint, includeUncommitted: boolean):
|
|
69
|
+
findIndexOfPreviousKey(newKey: bigint, includeUncommitted: boolean): {
|
|
93
70
|
/**
|
|
94
71
|
* The index of the found leaf.
|
|
95
72
|
*/
|
|
@@ -98,7 +75,7 @@ export declare class StandardIndexedTree extends TreeBase implements IndexedTree
|
|
|
98
75
|
* A flag indicating if the corresponding leaf's value is equal to `newValue`.
|
|
99
76
|
*/
|
|
100
77
|
alreadyPresent: boolean;
|
|
101
|
-
} | undefined
|
|
78
|
+
} | undefined;
|
|
102
79
|
private getCachedLowLeafIndex;
|
|
103
80
|
private getCachedLeafIndex;
|
|
104
81
|
private getDbLowLeafIndex;
|
|
@@ -110,14 +87,14 @@ export declare class StandardIndexedTree extends TreeBase implements IndexedTree
|
|
|
110
87
|
* @param includeUncommitted - If true, the uncommitted changes are included in the search.
|
|
111
88
|
* @returns A copy of the leaf preimage at the given index or undefined if the leaf was not found.
|
|
112
89
|
*/
|
|
113
|
-
getLatestLeafPreimageCopy(index: bigint, includeUncommitted: boolean):
|
|
90
|
+
getLatestLeafPreimageCopy(index: bigint, includeUncommitted: boolean): IndexedTreeLeafPreimage | undefined;
|
|
114
91
|
/**
|
|
115
92
|
* Returns the index of a leaf given its value, or undefined if no leaf with that value is found.
|
|
116
93
|
* @param value - The leaf value to look for.
|
|
117
94
|
* @param includeUncommitted - Indicates whether to include uncommitted data.
|
|
118
95
|
* @returns The index of the first leaf found with a given value (undefined if not found).
|
|
119
96
|
*/
|
|
120
|
-
findLeafIndex(value: Buffer, includeUncommitted: boolean):
|
|
97
|
+
findLeafIndex(value: Buffer, includeUncommitted: boolean): bigint | undefined;
|
|
121
98
|
/**
|
|
122
99
|
* Initializes the tree.
|
|
123
100
|
* @param prefilledSize - A number of leaves that are prefilled with values.
|
|
@@ -146,7 +123,7 @@ export declare class StandardIndexedTree extends TreeBase implements IndexedTree
|
|
|
146
123
|
* @param preimage - New contents of the leaf.
|
|
147
124
|
* @param index - Index of the leaf to be updated.
|
|
148
125
|
*/
|
|
149
|
-
protected updateLeaf(preimage: IndexedTreeLeafPreimage, index: bigint):
|
|
126
|
+
protected updateLeaf(preimage: IndexedTreeLeafPreimage, index: bigint): void;
|
|
150
127
|
/**
|
|
151
128
|
*
|
|
152
129
|
* Each base rollup needs to provide non membership / inclusion proofs for each of the nullifier.
|
|
@@ -289,7 +266,7 @@ export declare class StandardIndexedTree extends TreeBase implements IndexedTree
|
|
|
289
266
|
batchInsert<TreeHeight extends number, SubtreeHeight extends number, SubtreeSiblingPathHeight extends number>(leaves: Buffer[], subtreeHeight: SubtreeHeight): Promise<BatchInsertionResult<TreeHeight, SubtreeSiblingPathHeight>>;
|
|
290
267
|
getSubtreeSiblingPath<SubtreeHeight extends number, SubtreeSiblingPathHeight extends number>(subtreeHeight: SubtreeHeight, includeUncommitted: boolean): Promise<SiblingPath<SubtreeSiblingPathHeight>>;
|
|
291
268
|
snapshot(blockNumber: number): Promise<IndexedTreeSnapshot>;
|
|
292
|
-
getSnapshot(
|
|
269
|
+
getSnapshot(blockNumber: number): Promise<IndexedTreeSnapshot>;
|
|
293
270
|
/**
|
|
294
271
|
* Encodes leaves and appends them to a tree.
|
|
295
272
|
* @param preimages - Leaves to encode.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard_indexed_tree.d.ts","sourceRoot":"","sources":["../../src/standard_indexed_tree/standard_indexed_tree.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"standard_indexed_tree.d.ts","sourceRoot":"","sources":["../../src/standard_indexed_tree/standard_indexed_tree.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAsB,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEvH,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,eAAO,MAAM,qBAAqB,SAAU,MAAM,SAAS,MAAM,wCAEhE,CAAC;AAEF,eAAO,MAAM,sBAAsB,SAAU,MAAM,OAAO,MAAM,iDAE/D,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC;IACzC;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC;CAC7C;AAkBD;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAS,YAAW,WAAW;;IAapE,SAAS,CAAC,mBAAmB,EAAE,eAAe;IAC9C,SAAS,CAAC,WAAW,EAAE,WAAW;IAXpC,SAAS,CAAC,mBAAmB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,CAAA;KAAE,CAAM;IAC/E,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7E,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,OAAO,sBAAsB,CAAC,EAAE,MAAM,CAAC,CAAC;gBAG/E,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,oBAAa,EACP,mBAAmB,EAAE,eAAe,EACpC,WAAW,EAAE,WAAW,EAClC,IAAI,CAAC,EAAE,MAAM;IAOf;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C;;;OAGG;IACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAKpC;;;OAGG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC;;;;;OAKG;IACI,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAKnF;;;;;OAKG;IACH,sBAAsB,CACpB,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,OAAO,GAEzB;QACE;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd;;WAEG;QACH,cAAc,EAAE,OAAO,CAAC;KACzB,GACD,SAAS;IAyBb,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,iBAAiB;IAIzB;;;;;OAKG;IACI,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,GAAG,uBAAuB,GAAG,SAAS;IAOjH;;;;;OAKG;IACI,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAYpF;;;;;;;;;;;;;OAaG;IACU,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBvD;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;;;OAIG;IACH,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM;IAiBrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0IG;IACU,WAAW,CACtB,UAAU,SAAS,MAAM,EACzB,aAAa,SAAS,MAAM,EAC5B,wBAAwB,SAAS,MAAM,EAEvC,MAAM,EAAE,MAAM,EAAE,EAChB,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,oBAAoB,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;IAqHhE,qBAAqB,CAAC,aAAa,SAAS,MAAM,EAAE,wBAAwB,SAAS,MAAM,EAC/F,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,OAAO,GAC1B,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAQjD,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAI3D,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAI9D;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;;;;;;OAOG;IACH,OAAO,CAAC,UAAU;CASnB"}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
var _StandardIndexedTree_snapshotBuilder;
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
|
-
import {
|
|
4
|
-
import { createDebugLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { toBufferBE } from '@aztec/foundation/bigint-buffer';
|
|
5
4
|
import { Timer } from '@aztec/foundation/timer';
|
|
6
5
|
import { SiblingPath } from '@aztec/types/membership';
|
|
7
|
-
import { IndexedTreeSnapshotBuilder
|
|
6
|
+
import { IndexedTreeSnapshotBuilder } from '../snapshots/indexed_tree_snapshot.js';
|
|
8
7
|
import { TreeBase } from '../tree_base.js';
|
|
9
|
-
const log = createDebugLogger('aztec:standard-indexed-tree');
|
|
10
8
|
export const buildDbKeyForPreimage = (name, index) => {
|
|
11
9
|
return `${name}:leaf_by_index:${toBufferBE(index, 32).toString('hex')}`;
|
|
12
10
|
};
|
|
@@ -29,12 +27,14 @@ function getEmptyLowLeafWitness(treeHeight, leafPreimageFactory) {
|
|
|
29
27
|
* Standard implementation of an indexed tree.
|
|
30
28
|
*/
|
|
31
29
|
export class StandardIndexedTree extends TreeBase {
|
|
32
|
-
constructor(
|
|
33
|
-
super(
|
|
30
|
+
constructor(store, hasher, name, depth, size = 0n, leafPreimageFactory, leafFactory, root) {
|
|
31
|
+
super(store, hasher, name, depth, size, root);
|
|
34
32
|
this.leafPreimageFactory = leafPreimageFactory;
|
|
35
33
|
this.leafFactory = leafFactory;
|
|
36
|
-
_StandardIndexedTree_snapshotBuilder.set(this, new IndexedTreeSnapshotBuilder(this.
|
|
34
|
+
_StandardIndexedTree_snapshotBuilder.set(this, new IndexedTreeSnapshotBuilder(this.store, this, this.leafPreimageFactory));
|
|
37
35
|
this.cachedLeafPreimages = {};
|
|
36
|
+
this.leaves = store.openMap(`tree_${name}_leaves`);
|
|
37
|
+
this.leafIndex = store.openMap(`tree_${name}_leaf_index`);
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
40
|
* Appends the given leaves to the tree.
|
|
@@ -67,8 +67,8 @@ export class StandardIndexedTree extends TreeBase {
|
|
|
67
67
|
* @param includeUncommitted - Indicates whether to include uncommitted leaves in the computation.
|
|
68
68
|
* @returns The value of the leaf at the given index or undefined if the leaf is empty.
|
|
69
69
|
*/
|
|
70
|
-
|
|
71
|
-
const preimage =
|
|
70
|
+
getLeafValue(index, includeUncommitted) {
|
|
71
|
+
const preimage = this.getLatestLeafPreimageCopy(index, includeUncommitted);
|
|
72
72
|
return preimage && preimage.toBuffer();
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
@@ -77,9 +77,9 @@ export class StandardIndexedTree extends TreeBase {
|
|
|
77
77
|
* @param includeUncommitted - If true, the uncommitted changes are included in the search.
|
|
78
78
|
* @returns The found leaf index and a flag indicating if the corresponding leaf's value is equal to `newValue`.
|
|
79
79
|
*/
|
|
80
|
-
|
|
81
|
-
let lowLeafIndex =
|
|
82
|
-
let lowLeafPreimage = lowLeafIndex !== undefined ?
|
|
80
|
+
findIndexOfPreviousKey(newKey, includeUncommitted) {
|
|
81
|
+
let lowLeafIndex = this.getDbLowLeafIndex(newKey);
|
|
82
|
+
let lowLeafPreimage = lowLeafIndex !== undefined ? this.getDbPreimage(lowLeafIndex) : undefined;
|
|
83
83
|
if (includeUncommitted) {
|
|
84
84
|
const cachedLowLeafIndex = this.getCachedLowLeafIndex(newKey);
|
|
85
85
|
if (cachedLowLeafIndex !== undefined) {
|
|
@@ -118,35 +118,17 @@ export class StandardIndexedTree extends TreeBase {
|
|
|
118
118
|
}
|
|
119
119
|
return undefined;
|
|
120
120
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
limit: 1,
|
|
129
|
-
reverse: true,
|
|
130
|
-
})
|
|
131
|
-
.on('data', data => {
|
|
132
|
-
lowLeafIndex = toBigIntBE(data.value);
|
|
133
|
-
})
|
|
134
|
-
.on('close', function () { })
|
|
135
|
-
.on('end', function () {
|
|
136
|
-
resolve(lowLeafIndex);
|
|
137
|
-
})
|
|
138
|
-
.on('error', function () {
|
|
139
|
-
log.error('stream error');
|
|
140
|
-
reject();
|
|
141
|
-
});
|
|
142
|
-
});
|
|
121
|
+
getDbLowLeafIndex(key) {
|
|
122
|
+
const values = Array.from(this.leafIndex.values({
|
|
123
|
+
end: buildDbKeyForLeafIndex(this.getName(), key),
|
|
124
|
+
limit: 1,
|
|
125
|
+
reverse: true,
|
|
126
|
+
}));
|
|
127
|
+
return values[0];
|
|
143
128
|
}
|
|
144
|
-
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
.then(data => this.leafPreimageFactory.fromBuffer(data))
|
|
148
|
-
.catch(() => undefined);
|
|
149
|
-
return dbPreimage;
|
|
129
|
+
getDbPreimage(index) {
|
|
130
|
+
const value = this.leaves.get(buildDbKeyForPreimage(this.getName(), index));
|
|
131
|
+
return value ? this.leafPreimageFactory.fromBuffer(value) : undefined;
|
|
150
132
|
}
|
|
151
133
|
getCachedPreimage(index) {
|
|
152
134
|
return this.cachedLeafPreimages[index.toString()];
|
|
@@ -157,10 +139,10 @@ export class StandardIndexedTree extends TreeBase {
|
|
|
157
139
|
* @param includeUncommitted - If true, the uncommitted changes are included in the search.
|
|
158
140
|
* @returns A copy of the leaf preimage at the given index or undefined if the leaf was not found.
|
|
159
141
|
*/
|
|
160
|
-
|
|
142
|
+
getLatestLeafPreimageCopy(index, includeUncommitted) {
|
|
161
143
|
const preimage = !includeUncommitted
|
|
162
|
-
?
|
|
163
|
-
: this.getCachedPreimage(index) ??
|
|
144
|
+
? this.getDbPreimage(index)
|
|
145
|
+
: this.getCachedPreimage(index) ?? this.getDbPreimage(index);
|
|
164
146
|
return preimage && this.leafPreimageFactory.clone(preimage);
|
|
165
147
|
}
|
|
166
148
|
/**
|
|
@@ -169,12 +151,9 @@ export class StandardIndexedTree extends TreeBase {
|
|
|
169
151
|
* @param includeUncommitted - Indicates whether to include uncommitted data.
|
|
170
152
|
* @returns The index of the first leaf found with a given value (undefined if not found).
|
|
171
153
|
*/
|
|
172
|
-
|
|
154
|
+
findLeafIndex(value, includeUncommitted) {
|
|
173
155
|
const leaf = this.leafFactory.fromBuffer(value);
|
|
174
|
-
let index =
|
|
175
|
-
.get(buildDbKeyForLeafIndex(this.getName(), leaf.getKey()))
|
|
176
|
-
.then(data => toBigIntBE(data))
|
|
177
|
-
.catch(() => undefined);
|
|
156
|
+
let index = this.leafIndex.get(buildDbKeyForLeafIndex(this.getName(), leaf.getKey()));
|
|
178
157
|
if (includeUncommitted && index === undefined) {
|
|
179
158
|
const cachedIndex = this.getCachedLeafIndex(leaf.getKey());
|
|
180
159
|
index = cachedIndex;
|
|
@@ -207,23 +186,23 @@ export class StandardIndexedTree extends TreeBase {
|
|
|
207
186
|
}
|
|
208
187
|
// Make the last leaf point to the first leaf
|
|
209
188
|
leaves[prefilledSize - 1] = this.leafPreimageFactory.fromLeaf(leaves[prefilledSize - 1].asLeaf(), 0n, 0n);
|
|
210
|
-
|
|
189
|
+
this.encodeAndAppendLeaves(leaves, true);
|
|
211
190
|
await this.commit();
|
|
212
191
|
}
|
|
213
192
|
/**
|
|
214
193
|
* Commits all the leaves to the database and removes them from a cache.
|
|
215
194
|
*/
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
195
|
+
commitLeaves() {
|
|
196
|
+
return this.store.transaction(() => {
|
|
197
|
+
const keys = Object.getOwnPropertyNames(this.cachedLeafPreimages);
|
|
198
|
+
for (const key of keys) {
|
|
199
|
+
const leaf = this.cachedLeafPreimages[key];
|
|
200
|
+
const index = BigInt(key);
|
|
201
|
+
void this.leaves.set(buildDbKeyForPreimage(this.getName(), index), leaf.toBuffer());
|
|
202
|
+
void this.leafIndex.set(buildDbKeyForLeafIndex(this.getName(), leaf.getKey()), index);
|
|
203
|
+
}
|
|
204
|
+
this.clearCachedLeaves();
|
|
205
|
+
});
|
|
227
206
|
}
|
|
228
207
|
/**
|
|
229
208
|
* Clears the cache.
|
|
@@ -236,13 +215,13 @@ export class StandardIndexedTree extends TreeBase {
|
|
|
236
215
|
* @param preimage - New contents of the leaf.
|
|
237
216
|
* @param index - Index of the leaf to be updated.
|
|
238
217
|
*/
|
|
239
|
-
|
|
218
|
+
updateLeaf(preimage, index) {
|
|
240
219
|
if (index > this.maxIndex) {
|
|
241
220
|
throw Error(`Index out of bounds. Index ${index}, max index: ${this.maxIndex}.`);
|
|
242
221
|
}
|
|
243
222
|
this.cachedLeafPreimages[index.toString()] = preimage;
|
|
244
223
|
const encodedLeaf = this.encodeLeaf(preimage, true);
|
|
245
|
-
|
|
224
|
+
this.addLeafToCacheAndHashToRoot(encodedLeaf, index);
|
|
246
225
|
const numLeaves = this.getNumLeaves(true);
|
|
247
226
|
if (index >= numLeaves) {
|
|
248
227
|
this.cachedSize = index + 1n;
|
|
@@ -417,7 +396,7 @@ export class StandardIndexedTree extends TreeBase {
|
|
|
417
396
|
else {
|
|
418
397
|
insertedKeys.set(newLeaf.getKey(), true);
|
|
419
398
|
}
|
|
420
|
-
const indexOfPrevious =
|
|
399
|
+
const indexOfPrevious = this.findIndexOfPreviousKey(newLeaf.getKey(), true);
|
|
421
400
|
if (indexOfPrevious === undefined) {
|
|
422
401
|
return {
|
|
423
402
|
lowLeavesWitnessData: undefined,
|
|
@@ -428,7 +407,7 @@ export class StandardIndexedTree extends TreeBase {
|
|
|
428
407
|
}
|
|
429
408
|
const isUpdate = indexOfPrevious.alreadyPresent;
|
|
430
409
|
// get the low leaf (existence checked in getting index)
|
|
431
|
-
const lowLeafPreimage =
|
|
410
|
+
const lowLeafPreimage = this.getLatestLeafPreimageCopy(indexOfPrevious.index, true);
|
|
432
411
|
const siblingPath = await this.getSiblingPath(BigInt(indexOfPrevious.index), true);
|
|
433
412
|
const witness = {
|
|
434
413
|
leafPreimage: lowLeafPreimage,
|
|
@@ -440,12 +419,12 @@ export class StandardIndexedTree extends TreeBase {
|
|
|
440
419
|
if (isUpdate) {
|
|
441
420
|
const newLowLeaf = lowLeafPreimage.asLeaf().updateTo(newLeaf);
|
|
442
421
|
const newLowLeafPreimage = this.leafPreimageFactory.fromLeaf(newLowLeaf, lowLeafPreimage.getNextKey(), lowLeafPreimage.getNextIndex());
|
|
443
|
-
|
|
422
|
+
this.updateLeaf(newLowLeafPreimage, indexOfPrevious.index);
|
|
444
423
|
pendingInsertionSubtree[originalIndex] = this.leafPreimageFactory.empty();
|
|
445
424
|
}
|
|
446
425
|
else {
|
|
447
426
|
const newLowLeafPreimage = this.leafPreimageFactory.fromLeaf(lowLeafPreimage.asLeaf(), newLeaf.getKey(), startInsertionIndex + BigInt(originalIndex));
|
|
448
|
-
|
|
427
|
+
this.updateLeaf(newLowLeafPreimage, indexOfPrevious.index);
|
|
449
428
|
const currentPendingPreimageLeaf = this.leafPreimageFactory.fromLeaf(newLeaf, lowLeafPreimage.getNextKey(), lowLeafPreimage.getNextIndex());
|
|
450
429
|
pendingInsertionSubtree[originalIndex] = currentPendingPreimageLeaf;
|
|
451
430
|
}
|
|
@@ -454,7 +433,7 @@ export class StandardIndexedTree extends TreeBase {
|
|
|
454
433
|
// Perform batch insertion of new pending values
|
|
455
434
|
// Note: In this case we set `hash0Leaf` param to false because batch insertion algorithm use forced null leaf
|
|
456
435
|
// inclusion. See {@link encodeLeaf} for a more through param explanation.
|
|
457
|
-
|
|
436
|
+
this.encodeAndAppendLeaves(pendingInsertionSubtree, false);
|
|
458
437
|
this.log(`Inserted ${leaves.length} leaves into ${this.getName()} tree`, {
|
|
459
438
|
eventName: 'tree-insertion',
|
|
460
439
|
duration: timer.ms(),
|
|
@@ -480,8 +459,8 @@ export class StandardIndexedTree extends TreeBase {
|
|
|
480
459
|
snapshot(blockNumber) {
|
|
481
460
|
return __classPrivateFieldGet(this, _StandardIndexedTree_snapshotBuilder, "f").snapshot(blockNumber);
|
|
482
461
|
}
|
|
483
|
-
getSnapshot(
|
|
484
|
-
return __classPrivateFieldGet(this, _StandardIndexedTree_snapshotBuilder, "f").getSnapshot(
|
|
462
|
+
getSnapshot(blockNumber) {
|
|
463
|
+
return __classPrivateFieldGet(this, _StandardIndexedTree_snapshotBuilder, "f").getSnapshot(blockNumber);
|
|
485
464
|
}
|
|
486
465
|
/**
|
|
487
466
|
* Encodes leaves and appends them to a tree.
|
|
@@ -489,13 +468,13 @@ export class StandardIndexedTree extends TreeBase {
|
|
|
489
468
|
* @param hash0Leaf - Indicates whether 0 value leaf should be hashed. See {@link encodeLeaf}.
|
|
490
469
|
* @returns Empty promise
|
|
491
470
|
*/
|
|
492
|
-
|
|
471
|
+
encodeAndAppendLeaves(preimages, hash0Leaf) {
|
|
493
472
|
const startInsertionIndex = this.getNumLeaves(true);
|
|
494
473
|
const hashedLeaves = preimages.map((preimage, i) => {
|
|
495
474
|
this.cachedLeafPreimages[(startInsertionIndex + BigInt(i)).toString()] = preimage;
|
|
496
475
|
return this.encodeLeaf(preimage, hash0Leaf);
|
|
497
476
|
});
|
|
498
|
-
|
|
477
|
+
super.appendLeaves(hashedLeaves);
|
|
499
478
|
}
|
|
500
479
|
/**
|
|
501
480
|
* Encode a leaf into a buffer.
|
|
@@ -517,4 +496,4 @@ export class StandardIndexedTree extends TreeBase {
|
|
|
517
496
|
}
|
|
518
497
|
}
|
|
519
498
|
_StandardIndexedTree_snapshotBuilder = new WeakMap();
|
|
520
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRfaW5kZXhlZF90cmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0YW5kYXJkX2luZGV4ZWRfdHJlZS9zdGFuZGFyZF9pbmRleGVkX3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJdEQsT0FBTyxFQUlMLDBCQUEwQixHQUUzQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQTZCN0QsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLEVBQUU7SUFDbkUsT0FBTyxHQUFHLElBQUksa0JBQWtCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDMUUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsR0FBVyxFQUFFLEVBQUU7SUFDbEUsT0FBTyxHQUFHLElBQUksMkJBQTJCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDakYsQ0FBQyxDQUFDO0FBa0JGOzs7O0dBSUc7QUFDSCxTQUFTLHNCQUFzQixDQUM3QixVQUFhLEVBQ2IsbUJBQW9DO0lBRXBDLE9BQU87UUFDTCxZQUFZLEVB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
|
|
499
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRfaW5kZXhlZF90cmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0YW5kYXJkX2luZGV4ZWRfdHJlZS9zdGFuZGFyZF9pbmRleGVkX3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSWhELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd0RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUVuRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLEVBQUU7SUFDbkUsT0FBTyxHQUFHLElBQUksa0JBQWtCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFXLENBQUM7QUFDbkYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsR0FBVyxFQUFFLEVBQUU7SUFDbEUsT0FBTyxHQUFHLElBQUksMkJBQTJCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFXLENBQUM7QUFDMUYsQ0FBQyxDQUFDO0FBa0JGOzs7O0dBSUc7QUFDSCxTQUFTLHNCQUFzQixDQUM3QixVQUFhLEVBQ2IsbUJBQW9DO0lBRXBDLE9BQU87UUFDTCxZQUFZLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxFQUFFO1FBQ3pDLEtBQUssRUFBRSxFQUFFO1FBQ1QsV0FBVyxFQUFFLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFD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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard_indexed_tree_with_append.d.ts","sourceRoot":"","sources":["../../../src/standard_indexed_tree/test/standard_indexed_tree_with_append.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD;;;;GAIG;AACH,qBAAa,6BAA8B,SAAQ,mBAAmB;IACpE;;;;;OAKG;
|
|
1
|
+
{"version":3,"file":"standard_indexed_tree_with_append.d.ts","sourceRoot":"","sources":["../../../src/standard_indexed_tree/test/standard_indexed_tree_with_append.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD;;;;GAIG;AACH,qBAAa,6BAA8B,SAAQ,mBAAmB;IACpE;;;;;OAKG;IACI,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpD,OAAO,CAAC,eAAe;IAQvB;;;;OAIG;IACH,OAAO,CAAC,UAAU;CA6CnB"}
|
|
@@ -11,10 +11,11 @@ export class StandardIndexedTreeWithAppend extends StandardIndexedTree {
|
|
|
11
11
|
* @returns Empty promise.
|
|
12
12
|
* @remarks This method is inefficient and is here mostly for testing. Use batchInsert instead.
|
|
13
13
|
*/
|
|
14
|
-
|
|
14
|
+
appendLeaves(leaves) {
|
|
15
15
|
for (const leaf of leaves) {
|
|
16
|
-
|
|
16
|
+
this.appendLeaf(leaf);
|
|
17
17
|
}
|
|
18
|
+
return Promise.resolve();
|
|
18
19
|
}
|
|
19
20
|
appendEmptyLeaf() {
|
|
20
21
|
const newSize = (this.cachedSize ?? this.size) + 1n;
|
|
@@ -28,33 +29,33 @@ export class StandardIndexedTreeWithAppend extends StandardIndexedTree {
|
|
|
28
29
|
* @param leaf - The leaf to append.
|
|
29
30
|
* @returns Empty promise.
|
|
30
31
|
*/
|
|
31
|
-
|
|
32
|
+
appendLeaf(leaf) {
|
|
32
33
|
const newLeaf = this.leafFactory.fromBuffer(leaf);
|
|
33
34
|
// Special case when appending zero
|
|
34
35
|
if (newLeaf.getKey() === 0n) {
|
|
35
36
|
this.appendEmptyLeaf();
|
|
36
37
|
return;
|
|
37
38
|
}
|
|
38
|
-
const lowLeafIndex =
|
|
39
|
+
const lowLeafIndex = this.findIndexOfPreviousKey(newLeaf.getKey(), true);
|
|
39
40
|
if (lowLeafIndex === undefined) {
|
|
40
41
|
throw new Error(`Previous leaf not found!`);
|
|
41
42
|
}
|
|
42
43
|
const isUpdate = lowLeafIndex.alreadyPresent;
|
|
43
|
-
const lowLeafPreimage =
|
|
44
|
+
const lowLeafPreimage = this.getLatestLeafPreimageCopy(lowLeafIndex.index, true);
|
|
44
45
|
const currentSize = this.getNumLeaves(true);
|
|
45
46
|
if (isUpdate) {
|
|
46
47
|
const newLowLeaf = lowLeafPreimage.asLeaf().updateTo(newLeaf);
|
|
47
48
|
const newLowLeafPreimage = this.leafPreimageFactory.fromLeaf(newLowLeaf, lowLeafPreimage.getNextKey(), lowLeafPreimage.getNextIndex());
|
|
48
|
-
|
|
49
|
+
this.updateLeaf(newLowLeafPreimage, BigInt(lowLeafIndex.index));
|
|
49
50
|
this.appendEmptyLeaf();
|
|
50
51
|
}
|
|
51
52
|
else {
|
|
52
53
|
const newLeafPreimage = this.leafPreimageFactory.fromLeaf(newLeaf, lowLeafPreimage.getNextKey(), lowLeafPreimage.getNextIndex());
|
|
53
54
|
// insert a new leaf at the highest index and update the values of our previous leaf copy
|
|
54
55
|
const newLowLeafPreimage = this.leafPreimageFactory.fromLeaf(lowLeafPreimage.asLeaf(), newLeaf.getKey(), BigInt(currentSize));
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
this.updateLeaf(newLowLeafPreimage, BigInt(lowLeafIndex.index));
|
|
57
|
+
this.updateLeaf(newLeafPreimage, currentSize);
|
|
57
58
|
}
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRfaW5kZXhlZF90cmVlX3dpdGhfYXBwZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0YW5kYXJkX2luZGV4ZWRfdHJlZS90ZXN0L3N0YW5kYXJkX2luZGV4ZWRfdHJlZV93aXRoX2FwcGVuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLDZCQUE4QixTQUFRLG1CQUFtQjtJQUNwRTs7Ozs7T0FLRztJQUNJLFlBQVksQ0FBQyxNQUFnQjtRQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3BELElBQUksT0FBTyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakMsTUFBTSxLQUFLLENBQUMsNkNBQTZDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLFVBQVUsQ0FBQyxJQUFZO1FBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxELG1DQUFtQztRQUNuQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pFLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQztRQUM3QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUUsQ0FBQztRQUNsRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FDMUQsVUFBVSxFQUNWLGVBQWUsQ0FBQyxVQUFVLEVBQUUsRUFDNUIsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUMvQixDQUFDO1lBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FDdkQsT0FBTyxFQUNQLGVBQWUsQ0FBQyxVQUFVLEVBQUUsRUFDNUIsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUMvQixDQUFDO1lBRUYseUZBQXlGO1lBQ3pGLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FDMUQsZUFBZSxDQUFDLE1BQU0sRUFBRSxFQUN4QixPQUFPLENBQUMsTUFBTSxFQUFFLEVBQ2hCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FDcEIsQ0FBQztZQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { TreeSnapshot } from '../index.js';
|
|
3
2
|
import { AppendOnlyTree } from '../interfaces/append_only_tree.js';
|
|
3
|
+
import { TreeSnapshot } from '../snapshots/snapshot_builder.js';
|
|
4
4
|
import { TreeBase } from '../tree_base.js';
|
|
5
5
|
/**
|
|
6
6
|
* A Merkle tree implementation that uses a LevelDB database to store the tree.
|
|
@@ -13,8 +13,8 @@ export declare class StandardTree extends TreeBase implements AppendOnlyTree {
|
|
|
13
13
|
* @returns Empty promise.
|
|
14
14
|
*/
|
|
15
15
|
appendLeaves(leaves: Buffer[]): Promise<void>;
|
|
16
|
-
snapshot(
|
|
17
|
-
getSnapshot(
|
|
18
|
-
findLeafIndex(value: Buffer, includeUncommitted: boolean):
|
|
16
|
+
snapshot(blockNumber: number): Promise<TreeSnapshot>;
|
|
17
|
+
getSnapshot(blockNumber: number): Promise<TreeSnapshot>;
|
|
18
|
+
findLeafIndex(value: Buffer, includeUncommitted: boolean): bigint | undefined;
|
|
19
19
|
}
|
|
20
20
|
//# sourceMappingURL=standard_tree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard_tree.d.ts","sourceRoot":"","sources":["../../src/standard_tree/standard_tree.ts"],"names":[],"mappings":";AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"standard_tree.d.ts","sourceRoot":"","sources":["../../src/standard_tree/standard_tree.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;GAEG;AACH,qBAAa,YAAa,SAAQ,QAAS,YAAW,cAAc;;IAGlE;;;;OAIG;IACI,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB7C,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIpD,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIvD,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;CASrF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var _StandardTree_snapshotBuilder;
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
3
|
import { Timer } from '@aztec/foundation/timer';
|
|
4
|
-
import { AppendOnlySnapshotBuilder } from '../
|
|
4
|
+
import { AppendOnlySnapshotBuilder } from '../snapshots/append_only_snapshot.js';
|
|
5
5
|
import { TreeBase } from '../tree_base.js';
|
|
6
6
|
/**
|
|
7
7
|
* A Merkle tree implementation that uses a LevelDB database to store the tree.
|
|
@@ -9,17 +9,17 @@ import { TreeBase } from '../tree_base.js';
|
|
|
9
9
|
export class StandardTree extends TreeBase {
|
|
10
10
|
constructor() {
|
|
11
11
|
super(...arguments);
|
|
12
|
-
_StandardTree_snapshotBuilder.set(this, new AppendOnlySnapshotBuilder(this.
|
|
12
|
+
_StandardTree_snapshotBuilder.set(this, new AppendOnlySnapshotBuilder(this.store, this, this.hasher));
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* Appends the given leaves to the tree.
|
|
16
16
|
* @param leaves - The leaves to append.
|
|
17
17
|
* @returns Empty promise.
|
|
18
18
|
*/
|
|
19
|
-
|
|
19
|
+
appendLeaves(leaves) {
|
|
20
20
|
this.hasher.reset();
|
|
21
21
|
const timer = new Timer();
|
|
22
|
-
|
|
22
|
+
super.appendLeaves(leaves);
|
|
23
23
|
this.log(`Inserted ${leaves.length} leaves into ${this.getName()} tree`, {
|
|
24
24
|
eventName: 'tree-insertion',
|
|
25
25
|
duration: timer.ms(),
|
|
@@ -29,16 +29,17 @@ export class StandardTree extends TreeBase {
|
|
|
29
29
|
treeType: 'append-only',
|
|
30
30
|
...this.hasher.stats(),
|
|
31
31
|
});
|
|
32
|
+
return Promise.resolve();
|
|
32
33
|
}
|
|
33
|
-
snapshot(
|
|
34
|
-
return __classPrivateFieldGet(this, _StandardTree_snapshotBuilder, "f").snapshot(
|
|
34
|
+
snapshot(blockNumber) {
|
|
35
|
+
return __classPrivateFieldGet(this, _StandardTree_snapshotBuilder, "f").snapshot(blockNumber);
|
|
35
36
|
}
|
|
36
|
-
getSnapshot(
|
|
37
|
-
return __classPrivateFieldGet(this, _StandardTree_snapshotBuilder, "f").getSnapshot(
|
|
37
|
+
getSnapshot(blockNumber) {
|
|
38
|
+
return __classPrivateFieldGet(this, _StandardTree_snapshotBuilder, "f").getSnapshot(blockNumber);
|
|
38
39
|
}
|
|
39
|
-
|
|
40
|
+
findLeafIndex(value, includeUncommitted) {
|
|
40
41
|
for (let i = 0n; i < this.getNumLeaves(includeUncommitted); i++) {
|
|
41
|
-
const currentValue =
|
|
42
|
+
const currentValue = this.getLeafValue(i, includeUncommitted);
|
|
42
43
|
if (currentValue && currentValue.equals(value)) {
|
|
43
44
|
return i;
|
|
44
45
|
}
|
|
@@ -47,4 +48,4 @@ export class StandardTree extends TreeBase {
|
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
50
|
_StandardTree_snapshotBuilder = new WeakMap();
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRfdHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGFuZGFyZF90cmVlL3N0YW5kYXJkX3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHaEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFakYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQWEsU0FBUSxRQUFRO0lBQTFDOztRQUNFLHdDQUFtQixJQUFJLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBQztJQXlDbEYsQ0FBQztJQXZDQzs7OztPQUlHO0lBQ0ksWUFBWSxDQUFDLE1BQWdCO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUMxQixLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUU7WUFDdkUsU0FBUyxFQUFFLGdCQUFnQjtZQUMzQixRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNwQixTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDeEIsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDeEIsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDMUIsUUFBUSxFQUFFLGFBQWE7WUFDdkIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtTQUNNLENBQUMsQ0FBQztRQUVoQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU0sUUFBUSxDQUFDLFdBQW1CO1FBQ2pDLE9BQU8sdUJBQUEsSUFBSSxxQ0FBaUIsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLFdBQVcsQ0FBQyxXQUFtQjtRQUNwQyxPQUFPLHVCQUFBLElBQUkscUNBQWlCLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTSxhQUFhLENBQUMsS0FBYSxFQUFFLGtCQUEyQjtRQUM3RCxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUM5RCxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0NBQ0YifQ==
|