@feelyourprotocol/mpt 8141.0.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/README.md +448 -0
- package/dist/cjs/constructors.d.ts +12 -0
- package/dist/cjs/constructors.d.ts.map +1 -0
- package/dist/cjs/constructors.js +57 -0
- package/dist/cjs/constructors.js.map +1 -0
- package/dist/cjs/db/checkpointDB.d.ts +87 -0
- package/dist/cjs/db/checkpointDB.d.ts.map +1 -0
- package/dist/cjs/db/checkpointDB.js +258 -0
- package/dist/cjs/db/checkpointDB.js.map +1 -0
- package/dist/cjs/db/index.d.ts +2 -0
- package/dist/cjs/db/index.d.ts.map +1 -0
- package/dist/cjs/db/index.js +18 -0
- package/dist/cjs/db/index.js.map +1 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +24 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/mpt.d.ts +261 -0
- package/dist/cjs/mpt.d.ts.map +1 -0
- package/dist/cjs/mpt.js +900 -0
- package/dist/cjs/mpt.js.map +1 -0
- package/dist/cjs/node/branch.d.ts +14 -0
- package/dist/cjs/node/branch.d.ts.map +1 -0
- package/dist/cjs/node/branch.js +52 -0
- package/dist/cjs/node/branch.js.map +1 -0
- package/dist/cjs/node/extension.d.ts +7 -0
- package/dist/cjs/node/extension.d.ts.map +1 -0
- package/dist/cjs/node/extension.js +14 -0
- package/dist/cjs/node/extension.js.map +1 -0
- package/dist/cjs/node/extensionOrLeafNodeBase.d.ts +15 -0
- package/dist/cjs/node/extensionOrLeafNodeBase.d.ts.map +1 -0
- package/dist/cjs/node/extensionOrLeafNodeBase.js +42 -0
- package/dist/cjs/node/extensionOrLeafNodeBase.js.map +1 -0
- package/dist/cjs/node/index.d.ts +5 -0
- package/dist/cjs/node/index.d.ts.map +1 -0
- package/dist/cjs/node/index.js +21 -0
- package/dist/cjs/node/index.js.map +1 -0
- package/dist/cjs/node/leaf.d.ts +7 -0
- package/dist/cjs/node/leaf.d.ts.map +1 -0
- package/dist/cjs/node/leaf.js +14 -0
- package/dist/cjs/node/leaf.js.map +1 -0
- package/dist/cjs/node/util.d.ts +8 -0
- package/dist/cjs/node/util.d.ts.map +1 -0
- package/dist/cjs/node/util.js +38 -0
- package/dist/cjs/node/util.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/proof/index.d.ts +3 -0
- package/dist/cjs/proof/index.d.ts.map +1 -0
- package/dist/cjs/proof/index.js +19 -0
- package/dist/cjs/proof/index.js.map +1 -0
- package/dist/cjs/proof/proof.d.ts +41 -0
- package/dist/cjs/proof/proof.d.ts.map +1 -0
- package/dist/cjs/proof/proof.js +119 -0
- package/dist/cjs/proof/proof.js.map +1 -0
- package/dist/cjs/proof/range.d.ts +35 -0
- package/dist/cjs/proof/range.d.ts.map +1 -0
- package/dist/cjs/proof/range.js +456 -0
- package/dist/cjs/proof/range.js.map +1 -0
- package/dist/cjs/types.d.ts +110 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +6 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/util/asyncWalk.d.ts +20 -0
- package/dist/cjs/util/asyncWalk.d.ts.map +1 -0
- package/dist/cjs/util/asyncWalk.js +50 -0
- package/dist/cjs/util/asyncWalk.js.map +1 -0
- package/dist/cjs/util/encoding.d.ts +31 -0
- package/dist/cjs/util/encoding.d.ts.map +1 -0
- package/dist/cjs/util/encoding.js +200 -0
- package/dist/cjs/util/encoding.js.map +1 -0
- package/dist/cjs/util/genesisState.d.ts +6 -0
- package/dist/cjs/util/genesisState.d.ts.map +1 -0
- package/dist/cjs/util/genesisState.js +45 -0
- package/dist/cjs/util/genesisState.js.map +1 -0
- package/dist/cjs/util/hex.d.ts +20 -0
- package/dist/cjs/util/hex.d.ts.map +1 -0
- package/dist/cjs/util/hex.js +48 -0
- package/dist/cjs/util/hex.js.map +1 -0
- package/dist/cjs/util/index.d.ts +4 -0
- package/dist/cjs/util/index.d.ts.map +1 -0
- package/dist/cjs/util/index.js +20 -0
- package/dist/cjs/util/index.js.map +1 -0
- package/dist/cjs/util/nibbles.d.ts +30 -0
- package/dist/cjs/util/nibbles.d.ts.map +1 -0
- package/dist/cjs/util/nibbles.js +79 -0
- package/dist/cjs/util/nibbles.js.map +1 -0
- package/dist/cjs/util/walkController.d.ts +72 -0
- package/dist/cjs/util/walkController.d.ts.map +1 -0
- package/dist/cjs/util/walkController.js +138 -0
- package/dist/cjs/util/walkController.js.map +1 -0
- package/dist/esm/constructors.d.ts +12 -0
- package/dist/esm/constructors.d.ts.map +1 -0
- package/dist/esm/constructors.js +53 -0
- package/dist/esm/constructors.js.map +1 -0
- package/dist/esm/db/checkpointDB.d.ts +87 -0
- package/dist/esm/db/checkpointDB.d.ts.map +1 -0
- package/dist/esm/db/checkpointDB.js +254 -0
- package/dist/esm/db/checkpointDB.js.map +1 -0
- package/dist/esm/db/index.d.ts +2 -0
- package/dist/esm/db/index.d.ts.map +1 -0
- package/dist/esm/db/index.js +2 -0
- package/dist/esm/db/index.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/mpt.d.ts +261 -0
- package/dist/esm/mpt.d.ts.map +1 -0
- package/dist/esm/mpt.js +897 -0
- package/dist/esm/mpt.js.map +1 -0
- package/dist/esm/node/branch.d.ts +14 -0
- package/dist/esm/node/branch.d.ts.map +1 -0
- package/dist/esm/node/branch.js +48 -0
- package/dist/esm/node/branch.js.map +1 -0
- package/dist/esm/node/extension.d.ts +7 -0
- package/dist/esm/node/extension.d.ts.map +1 -0
- package/dist/esm/node/extension.js +10 -0
- package/dist/esm/node/extension.js.map +1 -0
- package/dist/esm/node/extensionOrLeafNodeBase.d.ts +15 -0
- package/dist/esm/node/extensionOrLeafNodeBase.d.ts.map +1 -0
- package/dist/esm/node/extensionOrLeafNodeBase.js +38 -0
- package/dist/esm/node/extensionOrLeafNodeBase.js.map +1 -0
- package/dist/esm/node/index.d.ts +5 -0
- package/dist/esm/node/index.d.ts.map +1 -0
- package/dist/esm/node/index.js +5 -0
- package/dist/esm/node/index.js.map +1 -0
- package/dist/esm/node/leaf.d.ts +7 -0
- package/dist/esm/node/leaf.d.ts.map +1 -0
- package/dist/esm/node/leaf.js +10 -0
- package/dist/esm/node/leaf.js.map +1 -0
- package/dist/esm/node/util.d.ts +8 -0
- package/dist/esm/node/util.d.ts.map +1 -0
- package/dist/esm/node/util.js +33 -0
- package/dist/esm/node/util.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/proof/index.d.ts +3 -0
- package/dist/esm/proof/index.d.ts.map +1 -0
- package/dist/esm/proof/index.js +3 -0
- package/dist/esm/proof/index.js.map +1 -0
- package/dist/esm/proof/proof.d.ts +41 -0
- package/dist/esm/proof/proof.d.ts.map +1 -0
- package/dist/esm/proof/proof.js +113 -0
- package/dist/esm/proof/proof.js.map +1 -0
- package/dist/esm/proof/range.d.ts +35 -0
- package/dist/esm/proof/range.d.ts.map +1 -0
- package/dist/esm/proof/range.js +453 -0
- package/dist/esm/proof/range.js.map +1 -0
- package/dist/esm/types.d.ts +110 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +3 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/util/asyncWalk.d.ts +20 -0
- package/dist/esm/util/asyncWalk.d.ts.map +1 -0
- package/dist/esm/util/asyncWalk.js +47 -0
- package/dist/esm/util/asyncWalk.js.map +1 -0
- package/dist/esm/util/encoding.d.ts +31 -0
- package/dist/esm/util/encoding.d.ts.map +1 -0
- package/dist/esm/util/encoding.js +188 -0
- package/dist/esm/util/encoding.js.map +1 -0
- package/dist/esm/util/genesisState.d.ts +6 -0
- package/dist/esm/util/genesisState.d.ts.map +1 -0
- package/dist/esm/util/genesisState.js +42 -0
- package/dist/esm/util/genesisState.js.map +1 -0
- package/dist/esm/util/hex.d.ts +20 -0
- package/dist/esm/util/hex.d.ts.map +1 -0
- package/dist/esm/util/hex.js +43 -0
- package/dist/esm/util/hex.js.map +1 -0
- package/dist/esm/util/index.d.ts +4 -0
- package/dist/esm/util/index.d.ts.map +1 -0
- package/dist/esm/util/index.js +4 -0
- package/dist/esm/util/index.js.map +1 -0
- package/dist/esm/util/nibbles.d.ts +30 -0
- package/dist/esm/util/nibbles.d.ts.map +1 -0
- package/dist/esm/util/nibbles.js +73 -0
- package/dist/esm/util/nibbles.js.map +1 -0
- package/dist/esm/util/walkController.d.ts +72 -0
- package/dist/esm/util/walkController.d.ts.map +1 -0
- package/dist/esm/util/walkController.js +134 -0
- package/dist/esm/util/walkController.js.map +1 -0
- package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
- package/package.json +85 -0
- package/src/constructors.ts +71 -0
- package/src/db/checkpointDB.ts +298 -0
- package/src/db/index.ts +1 -0
- package/src/index.ts +7 -0
- package/src/mpt.ts +1090 -0
- package/src/node/branch.ts +60 -0
- package/src/node/extension.ts +13 -0
- package/src/node/extensionOrLeafNodeBase.ts +54 -0
- package/src/node/index.ts +4 -0
- package/src/node/leaf.ts +13 -0
- package/src/node/util.ts +35 -0
- package/src/proof/index.ts +2 -0
- package/src/proof/proof.ts +135 -0
- package/src/proof/range.ts +542 -0
- package/src/types.ts +151 -0
- package/src/util/asyncWalk.ts +60 -0
- package/src/util/encoding.ts +209 -0
- package/src/util/genesisState.ts +52 -0
- package/src/util/hex.ts +47 -0
- package/src/util/index.ts +3 -0
- package/src/util/nibbles.ts +80 -0
- package/src/util/walkController.ts +172 -0
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CheckpointDB = void 0;
|
|
4
|
+
const util_1 = require("@feelyourprotocol/util");
|
|
5
|
+
const lru_cache_1 = require("lru-cache");
|
|
6
|
+
/**
|
|
7
|
+
* DB is a thin wrapper around the underlying levelup db,
|
|
8
|
+
* which validates inputs and sets encoding type.
|
|
9
|
+
*/
|
|
10
|
+
class CheckpointDB {
|
|
11
|
+
/**
|
|
12
|
+
* Initialize a DB instance.
|
|
13
|
+
*/
|
|
14
|
+
constructor(opts) {
|
|
15
|
+
// protected _cache?: LRUCache<string, Uint8Array | undefined>
|
|
16
|
+
this._stats = {
|
|
17
|
+
cache: {
|
|
18
|
+
reads: 0,
|
|
19
|
+
hits: 0,
|
|
20
|
+
writes: 0,
|
|
21
|
+
},
|
|
22
|
+
db: {
|
|
23
|
+
reads: 0,
|
|
24
|
+
hits: 0,
|
|
25
|
+
writes: 0,
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
this.db = opts.db;
|
|
29
|
+
this.cacheSize = opts.cacheSize ?? 0;
|
|
30
|
+
this.valueEncoding = opts.valueEncoding ?? util_1.ValueEncoding.String;
|
|
31
|
+
// Roots of trie at the moment of checkpoint
|
|
32
|
+
this.checkpoints = [];
|
|
33
|
+
if (this.cacheSize > 0) {
|
|
34
|
+
this._cache = new lru_cache_1.LRUCache({
|
|
35
|
+
max: this.cacheSize,
|
|
36
|
+
updateAgeOnGet: true,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Flush the checkpoints and use the given checkpoints instead.
|
|
42
|
+
* @param {Checkpoint[]} checkpoints
|
|
43
|
+
*/
|
|
44
|
+
setCheckpoints(checkpoints) {
|
|
45
|
+
this.checkpoints = [];
|
|
46
|
+
for (let i = 0; i < checkpoints.length; i++) {
|
|
47
|
+
this.checkpoints.push({
|
|
48
|
+
root: checkpoints[i].root,
|
|
49
|
+
keyValueMap: new Map(checkpoints[i].keyValueMap),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Is the DB during a checkpoint phase?
|
|
55
|
+
*/
|
|
56
|
+
hasCheckpoints() {
|
|
57
|
+
return this.checkpoints.length > 0;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Adds a new checkpoint to the stack
|
|
61
|
+
* @param root
|
|
62
|
+
*/
|
|
63
|
+
checkpoint(root) {
|
|
64
|
+
this.checkpoints.push({ keyValueMap: new Map(), root });
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Commits the latest checkpoint
|
|
68
|
+
*/
|
|
69
|
+
async commit() {
|
|
70
|
+
const { keyValueMap } = this.checkpoints.pop();
|
|
71
|
+
if (!this.hasCheckpoints()) {
|
|
72
|
+
// This was the final checkpoint, we should now commit and flush everything to disk
|
|
73
|
+
const batchOp = [];
|
|
74
|
+
for (const [key, value] of keyValueMap.entries()) {
|
|
75
|
+
if (value === undefined) {
|
|
76
|
+
batchOp.push({
|
|
77
|
+
type: 'del',
|
|
78
|
+
key: (0, util_1.unprefixedHexToBytes)(key),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
batchOp.push({
|
|
83
|
+
type: 'put',
|
|
84
|
+
key: (0, util_1.unprefixedHexToBytes)(key),
|
|
85
|
+
value,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
await this.batch(batchOp);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
// dump everything into the current (higher level) diff cache
|
|
93
|
+
const currentKeyValueMap = this.checkpoints[this.checkpoints.length - 1].keyValueMap;
|
|
94
|
+
for (const [key, value] of keyValueMap.entries()) {
|
|
95
|
+
currentKeyValueMap.set(key, value);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Reverts the latest checkpoint
|
|
101
|
+
*/
|
|
102
|
+
async revert() {
|
|
103
|
+
const { root } = this.checkpoints.pop();
|
|
104
|
+
return root;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* @inheritDoc
|
|
108
|
+
*/
|
|
109
|
+
async get(key) {
|
|
110
|
+
// Using deprecated bytesToUnprefixedHex for performance: used as cache/database keys (string encoding).
|
|
111
|
+
const keyHex = (0, util_1.bytesToUnprefixedHex)(key);
|
|
112
|
+
if (this._cache !== undefined) {
|
|
113
|
+
const value = this._cache.get(keyHex);
|
|
114
|
+
this._stats.cache.reads += 1;
|
|
115
|
+
if (value !== undefined) {
|
|
116
|
+
this._stats.cache.hits += 1;
|
|
117
|
+
return value;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Lookup the value in our diff cache. We return the latest checkpointed value (which should be the value on disk)
|
|
121
|
+
for (let index = this.checkpoints.length - 1; index >= 0; index--) {
|
|
122
|
+
if (this.checkpoints[index].keyValueMap.has(keyHex)) {
|
|
123
|
+
return this.checkpoints[index].keyValueMap.get(keyHex);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Nothing has been found in diff cache, look up from disk
|
|
127
|
+
const value = await this.db.get(keyHex, {
|
|
128
|
+
keyEncoding: util_1.KeyEncoding.String,
|
|
129
|
+
valueEncoding: this.valueEncoding,
|
|
130
|
+
});
|
|
131
|
+
this._stats.db.reads += 1;
|
|
132
|
+
if (value !== undefined) {
|
|
133
|
+
this._stats.db.hits += 1;
|
|
134
|
+
}
|
|
135
|
+
const returnValue = value !== undefined
|
|
136
|
+
? value instanceof Uint8Array
|
|
137
|
+
? value
|
|
138
|
+
: (0, util_1.unprefixedHexToBytes)(value)
|
|
139
|
+
: undefined;
|
|
140
|
+
this._cache?.set(keyHex, returnValue);
|
|
141
|
+
if (this.hasCheckpoints()) {
|
|
142
|
+
// Since we are a checkpoint, put this value in diff cache,
|
|
143
|
+
// so future `get` calls will not look the key up again from disk.
|
|
144
|
+
this.checkpoints[this.checkpoints.length - 1].keyValueMap.set(keyHex, returnValue);
|
|
145
|
+
}
|
|
146
|
+
return returnValue;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* @inheritDoc
|
|
150
|
+
*/
|
|
151
|
+
async put(key, value) {
|
|
152
|
+
// Using deprecated bytesToUnprefixedHex for performance: used as cache/database keys and values (string encoding).
|
|
153
|
+
const keyHex = (0, util_1.bytesToUnprefixedHex)(key);
|
|
154
|
+
if (this.hasCheckpoints()) {
|
|
155
|
+
// put value in diff cache
|
|
156
|
+
this.checkpoints[this.checkpoints.length - 1].keyValueMap.set(keyHex, value);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
const valuePut = this.valueEncoding === util_1.ValueEncoding.Bytes ? value : (0, util_1.bytesToUnprefixedHex)(value);
|
|
160
|
+
await this.db.put(keyHex, valuePut, {
|
|
161
|
+
keyEncoding: util_1.KeyEncoding.String,
|
|
162
|
+
valueEncoding: this.valueEncoding,
|
|
163
|
+
});
|
|
164
|
+
this._stats.db.writes += 1;
|
|
165
|
+
if (this._cache !== undefined) {
|
|
166
|
+
this._cache.set(keyHex, value);
|
|
167
|
+
this._stats.cache.writes += 1;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* @inheritDoc
|
|
173
|
+
*/
|
|
174
|
+
async del(key) {
|
|
175
|
+
// Using deprecated bytesToUnprefixedHex for performance: used as cache/database keys (string encoding).
|
|
176
|
+
const keyHex = (0, util_1.bytesToUnprefixedHex)(key);
|
|
177
|
+
if (this.hasCheckpoints()) {
|
|
178
|
+
// delete the value in the current diff cache
|
|
179
|
+
this.checkpoints[this.checkpoints.length - 1].keyValueMap.set(keyHex, undefined);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
// delete the value on disk
|
|
183
|
+
await this.db.del(keyHex, {
|
|
184
|
+
keyEncoding: util_1.KeyEncoding.String,
|
|
185
|
+
});
|
|
186
|
+
this._stats.db.writes += 1;
|
|
187
|
+
if (this._cache !== undefined) {
|
|
188
|
+
this._cache.set(keyHex, undefined);
|
|
189
|
+
this._stats.cache.writes += 1;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* @inheritDoc
|
|
195
|
+
*/
|
|
196
|
+
async batch(opStack) {
|
|
197
|
+
if (this.hasCheckpoints()) {
|
|
198
|
+
for (const op of opStack) {
|
|
199
|
+
if (op.type === 'put') {
|
|
200
|
+
await this.put(op.key, op.value);
|
|
201
|
+
}
|
|
202
|
+
else if (op.type === 'del') {
|
|
203
|
+
await this.del(op.key);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
// Using deprecated bytesToUnprefixedHex for performance: used as database keys/values (string encoding).
|
|
209
|
+
const convertedOps = opStack.map((op) => {
|
|
210
|
+
const convertedOp = {
|
|
211
|
+
key: (0, util_1.bytesToUnprefixedHex)(op.key),
|
|
212
|
+
value: op.type === 'put' ? op.value : undefined,
|
|
213
|
+
type: op.type,
|
|
214
|
+
opts: { ...op.opts, ...{ valueEncoding: this.valueEncoding } },
|
|
215
|
+
};
|
|
216
|
+
this._stats.db.writes += 1;
|
|
217
|
+
if (op.type === 'put' && this.valueEncoding === util_1.ValueEncoding.String) {
|
|
218
|
+
convertedOp.value = (0, util_1.bytesToUnprefixedHex)(convertedOp.value);
|
|
219
|
+
}
|
|
220
|
+
return convertedOp;
|
|
221
|
+
});
|
|
222
|
+
await this.db.batch(convertedOps);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
stats(reset = true) {
|
|
226
|
+
const stats = { ...this._stats, size: this._cache?.size ?? 0 };
|
|
227
|
+
if (reset) {
|
|
228
|
+
this._stats = {
|
|
229
|
+
cache: {
|
|
230
|
+
reads: 0,
|
|
231
|
+
hits: 0,
|
|
232
|
+
writes: 0,
|
|
233
|
+
},
|
|
234
|
+
db: {
|
|
235
|
+
reads: 0,
|
|
236
|
+
hits: 0,
|
|
237
|
+
writes: 0,
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
return stats;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* @inheritDoc
|
|
245
|
+
*/
|
|
246
|
+
shallowCopy() {
|
|
247
|
+
return new CheckpointDB({
|
|
248
|
+
db: this.db,
|
|
249
|
+
cacheSize: this.cacheSize,
|
|
250
|
+
valueEncoding: this.valueEncoding,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
open() {
|
|
254
|
+
return Promise.resolve();
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
exports.CheckpointDB = CheckpointDB;
|
|
258
|
+
//# sourceMappingURL=checkpointDB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpointDB.js","sourceRoot":"","sources":["../../../src/db/checkpointDB.ts"],"names":[],"mappings":";;;AAAA,2CAKyB;AACzB,yCAAoC;AAKpC;;;GAGG;AACH,MAAa,YAAY;IA+BvB;;OAEG;IACH,YAAY,IAAsB;QAlBlC,8DAA8D;QAE9D,WAAM,GAAG;YACP,KAAK,EAAE;gBACL,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,CAAC;aACV;YACD,EAAE,EAAE;gBACF,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,CAAC;aACV;SACF,CAAA;QAMC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;QACjB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,CAAA;QACpC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,oBAAa,CAAC,MAAM,CAAA;QAC/D,4CAA4C;QAC5C,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QAErB,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,IAAI,oBAAQ,CAAC;gBACzB,GAAG,EAAE,IAAI,CAAC,SAAS;gBACnB,cAAc,EAAE,IAAI;aACrB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,WAAyB;QACtC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBACpB,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;gBACzB,WAAW,EAAE,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;aACjD,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAA;IACpC,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,IAAgB;QACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG,EAAsB,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAG,CAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,mFAAmF;YACnF,MAAM,OAAO,GAAgB,EAAE,CAAA;YAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;gBACjD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,KAAK;wBACX,GAAG,EAAE,IAAA,2BAAoB,EAAC,GAAG,CAAC;qBAC/B,CAAC,CAAA;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,KAAK;wBACX,GAAG,EAAE,IAAA,2BAAoB,EAAC,GAAG,CAAC;wBAC9B,KAAK;qBACN,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YACD,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC3B,CAAC;aAAM,CAAC;YACN,6DAA6D;YAC7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,CAAA;YACpF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;gBACjD,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAG,CAAA;QACxC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,GAAe;QACvB,wGAAwG;QACxG,MAAM,MAAM,GAAG,IAAA,2BAAoB,EAAC,GAAG,CAAC,CAAA;QACxC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAA;YAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAA;gBAC3B,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QAED,kHAAkH;QAClH,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YAClE,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACxD,CAAC;QACH,CAAC;QACD,0DAA0D;QAC1D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE;YACtC,WAAW,EAAE,kBAAW,CAAC,MAAM;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAA;QACzB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAA;QAC1B,CAAC;QACD,MAAM,WAAW,GACf,KAAK,KAAK,SAAS;YACjB,CAAC,CAAC,KAAK,YAAY,UAAU;gBAC3B,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IAAA,2BAAoB,EAAC,KAAe,CAAC;YACzC,CAAC,CAAC,SAAS,CAAA;QACf,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QACrC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,2DAA2D;YAC3D,kEAAkE;YAClE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QACpF,CAAC;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,GAAe,EAAE,KAAiB;QAC1C,mHAAmH;QACnH,MAAM,MAAM,GAAG,IAAA,2BAAoB,EAAC,GAAG,CAAC,CAAA;QACxC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,0BAA0B;YAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC9E,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GACZ,IAAI,CAAC,aAAa,KAAK,oBAAa,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,2BAAoB,EAAC,KAAK,CAAC,CAAA;YAClF,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE;gBAClC,WAAW,EAAE,kBAAW,CAAC,MAAM;gBAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAA;YAE1B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;gBAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,GAAe;QACvB,wGAAwG;QACxG,MAAM,MAAM,GAAG,IAAA,2BAAoB,EAAC,GAAG,CAAC,CAAA;QACxC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,6CAA6C;YAC7C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QAClF,CAAC;aAAM,CAAC;YACN,2BAA2B;YAC3B,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE;gBACxB,WAAW,EAAE,kBAAW,CAAC,MAAM;aAChC,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAA;YAE1B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;gBAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,OAAoB;QAC9B,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;gBACzB,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBACtB,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;gBAClC,CAAC;qBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBAC7B,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,yGAAyG;YACzG,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBACtC,MAAM,WAAW,GAKb;oBACF,GAAG,EAAE,IAAA,2BAAoB,EAAC,EAAE,CAAC,GAAG,CAAC;oBACjC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;oBAC/C,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE;iBAC/D,CAAA;gBACD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAA;gBAC1B,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,aAAa,KAAK,oBAAa,CAAC,MAAM,EAAE,CAAC;oBACrE,WAAW,CAAC,KAAK,GAAG,IAAA,2BAAoB,EAAC,WAAW,CAAC,KAAmB,CAAC,CAAA;gBAC3E,CAAC;gBACD,OAAO,WAAW,CAAA;YACpB,CAAC,CAAC,CAAA;YACF,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,YAAmB,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,GAAG,IAAI;QAChB,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAA;QAC9D,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,GAAG;gBACZ,KAAK,EAAE;oBACL,KAAK,EAAE,CAAC;oBACR,IAAI,EAAE,CAAC;oBACP,MAAM,EAAE,CAAC;iBACV;gBACD,EAAE,EAAE;oBACF,KAAK,EAAE,CAAC;oBACR,IAAI,EAAE,CAAC;oBACP,MAAM,EAAE,CAAC;iBACV;aACF,CAAA;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,YAAY,CAAC;YACtB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI;QACF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC;CACF;AA1RD,oCA0RC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/db/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./checkpointDB.js"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAiC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './constructors.ts';
|
|
2
|
+
export * from './db/index.ts';
|
|
3
|
+
export * from './mpt.ts';
|
|
4
|
+
export * from './node/index.ts';
|
|
5
|
+
export * from './proof/index.ts';
|
|
6
|
+
export * from './types.ts';
|
|
7
|
+
export * from './util/index.ts';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./constructors.js"), exports);
|
|
18
|
+
__exportStar(require("./db/index.js"), exports);
|
|
19
|
+
__exportStar(require("./mpt.js"), exports);
|
|
20
|
+
__exportStar(require("./node/index.js"), exports);
|
|
21
|
+
__exportStar(require("./proof/index.js"), exports);
|
|
22
|
+
__exportStar(require("./types.js"), exports);
|
|
23
|
+
__exportStar(require("./util/index.js"), exports);
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAiC;AACjC,gDAA6B;AAC7B,2CAAwB;AACxB,kDAA+B;AAC/B,mDAAgC;AAChC,6CAA0B;AAC1B,kDAA+B"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { Lock, ValueEncoding } from '@feelyourprotocol/util';
|
|
2
|
+
import { CheckpointDB } from './db/checkpointDB.ts';
|
|
3
|
+
import type { BatchDBOp, DB } from '@feelyourprotocol/util';
|
|
4
|
+
import type { Debugger } from 'debug';
|
|
5
|
+
import type { BranchMPTNodeBranchValue, FoundNodeFunction, MPTNode, MPTOpts, MPTOptsWithDefaults, Nibbles, NodeReferenceOrRawMPTNode, Path, TrieShallowCopyOpts } from './types.ts';
|
|
6
|
+
import type { OnFound } from './util/asyncWalk.ts';
|
|
7
|
+
/**
|
|
8
|
+
* The basic trie interface, use with `import { MerklePatriciaTrie } from '@feelyourprotocol/mpt'`.
|
|
9
|
+
*
|
|
10
|
+
* A MerklePatriciaTrie object can be created with the constructor method:
|
|
11
|
+
*
|
|
12
|
+
* - {@link createMPT}
|
|
13
|
+
*
|
|
14
|
+
* A sparse MerklePatriciaTrie object can be created from a merkle proof:
|
|
15
|
+
*
|
|
16
|
+
* - {@link createMPTFromProof}
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Merkle Patricia Trie - a space-optimized trie where each node with only one child
|
|
20
|
+
* is merged with its parent. Used for Ethereum state and storage.
|
|
21
|
+
*
|
|
22
|
+
* Node types:
|
|
23
|
+
* - Branch: 16-way branch + optional value (for keys ending at this node)
|
|
24
|
+
* - Extension: short path (nibbles) → child node
|
|
25
|
+
* - Leaf: remaining path (nibbles) → value
|
|
26
|
+
*/
|
|
27
|
+
export declare class MerklePatriciaTrie {
|
|
28
|
+
/** Options with defaults applied */
|
|
29
|
+
protected readonly _opts: MPTOptsWithDefaults;
|
|
30
|
+
/** The root for an empty trie */
|
|
31
|
+
EMPTY_TRIE_ROOT: Uint8Array;
|
|
32
|
+
/** The backend DB */
|
|
33
|
+
protected _db: CheckpointDB;
|
|
34
|
+
protected _hashLen: number;
|
|
35
|
+
protected _lock: Lock;
|
|
36
|
+
protected _root: Uint8Array;
|
|
37
|
+
/** Debug logging */
|
|
38
|
+
protected DEBUG: boolean;
|
|
39
|
+
protected _debug: Debugger;
|
|
40
|
+
protected debug: (...args: any) => void;
|
|
41
|
+
/**
|
|
42
|
+
* Creates a new trie.
|
|
43
|
+
* @param opts Options for instantiating the trie
|
|
44
|
+
*
|
|
45
|
+
* Note: in most cases, {@link createMPT} constructor should be used. It uses the same API but provides sensible defaults
|
|
46
|
+
*/
|
|
47
|
+
constructor(opts?: MPTOpts);
|
|
48
|
+
database(db?: DB<string, string | Uint8Array>, valueEncoding?: ValueEncoding): CheckpointDB;
|
|
49
|
+
/**
|
|
50
|
+
* Gets and/or Sets the current root of the `trie`
|
|
51
|
+
*/
|
|
52
|
+
root(value?: Uint8Array | null): Uint8Array;
|
|
53
|
+
/**
|
|
54
|
+
* Checks if a given root exists.
|
|
55
|
+
*/
|
|
56
|
+
checkRoot(root: Uint8Array): Promise<boolean>;
|
|
57
|
+
/**
|
|
58
|
+
* Gets a value given a `key`
|
|
59
|
+
* @param key - the key to search for
|
|
60
|
+
* @param throwIfMissing - if true, throws if any nodes are missing. Used for verifying proofs. (default: false)
|
|
61
|
+
* @returns A Promise that resolves to `Uint8Array` if a value was found or `null` if no value was found.
|
|
62
|
+
*/
|
|
63
|
+
get(key: Uint8Array, throwIfMissing?: boolean): Promise<Uint8Array | null>;
|
|
64
|
+
/**
|
|
65
|
+
* Stores a given `value` at the given `key` or do a delete if `value` is empty
|
|
66
|
+
* (delete operations are only executed on DB with `deleteFromDB` set to `true`)
|
|
67
|
+
* @param key
|
|
68
|
+
* @param value
|
|
69
|
+
* @returns A Promise that resolves once value is stored.
|
|
70
|
+
*/
|
|
71
|
+
put(key: Uint8Array, value: Uint8Array | null, skipKeyTransform?: boolean): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Deletes a value given a `key` from the trie
|
|
74
|
+
* (delete operations are only executed on DB with `deleteFromDB` set to `true`)
|
|
75
|
+
* @param key
|
|
76
|
+
* @returns A Promise that resolves once value is deleted.
|
|
77
|
+
*/
|
|
78
|
+
del(key: Uint8Array, skipKeyTransform?: boolean): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Finds the path from root to the node for the given key.
|
|
81
|
+
* Walks the trie, matching nibbles at each level. Returns the target node (if found)
|
|
82
|
+
* and the stack of nodes along the path (needed for updates/deletes).
|
|
83
|
+
*
|
|
84
|
+
* @param key - the search key (bytes)
|
|
85
|
+
* @param throwIfMissing - if true, throws when nodes are missing (e.g. proof verification)
|
|
86
|
+
* @param partialPath - optional pre-loaded stack for resuming from a mid-path node
|
|
87
|
+
*/
|
|
88
|
+
findPath(key: Uint8Array, throwIfMissing?: boolean, partialPath?: {
|
|
89
|
+
stack: MPTNode[];
|
|
90
|
+
}): Promise<Path>;
|
|
91
|
+
/**
|
|
92
|
+
* Walks a trie until finished.
|
|
93
|
+
* @param root
|
|
94
|
+
* @param onFound - callback to call when a node is found. This schedules new tasks. If no tasks are available, the Promise resolves.
|
|
95
|
+
* @returns Resolves when finished walking trie.
|
|
96
|
+
*/
|
|
97
|
+
walkTrie(root: Uint8Array, onFound: FoundNodeFunction): Promise<void>;
|
|
98
|
+
walkTrieIterable: (nodeHash: Uint8Array<ArrayBufferLike>, currentKey?: number[] | undefined, onFound?: OnFound | undefined, filter?: import("./util/asyncWalk.ts").NodeFilter | undefined, visited?: Set<string> | undefined) => AsyncIterable<{
|
|
99
|
+
node: MPTNode;
|
|
100
|
+
currentKey: number[];
|
|
101
|
+
}>;
|
|
102
|
+
/**
|
|
103
|
+
* Executes a callback for each node in the trie.
|
|
104
|
+
* @param onFound - callback to call when a node is found.
|
|
105
|
+
* @returns Resolves when finished walking trie.
|
|
106
|
+
*/
|
|
107
|
+
walkAllNodes(onFound: OnFound): Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* Executes a callback for each value node in the trie.
|
|
110
|
+
* @param onFound - callback to call when a node is found.
|
|
111
|
+
* @returns Resolves when finished walking trie.
|
|
112
|
+
*/
|
|
113
|
+
walkAllValueNodes(onFound: OnFound): Promise<void>;
|
|
114
|
+
/**
|
|
115
|
+
* Creates the initial leaf node when inserting into an empty trie.
|
|
116
|
+
* @private
|
|
117
|
+
*/
|
|
118
|
+
protected _createInitialNode(key: Uint8Array, value: Uint8Array): Promise<void>;
|
|
119
|
+
/**
|
|
120
|
+
* Retrieves a node from db by hash.
|
|
121
|
+
*/
|
|
122
|
+
lookupNode(node: Uint8Array | Uint8Array[]): Promise<MPTNode>;
|
|
123
|
+
/**
|
|
124
|
+
* True when we're updating an existing leaf value (key already exists, no structural change).
|
|
125
|
+
* @private
|
|
126
|
+
*/
|
|
127
|
+
protected _isMatchingLeafUpdate(lastNode: MPTNode, stack: MPTNode[], fullKeyNibbles: Nibbles, keyRemainder: Nibbles): boolean;
|
|
128
|
+
/**
|
|
129
|
+
* Applies a value update given the path from findPath. Modifies the stack in-place
|
|
130
|
+
* to represent the new structure, then calls saveStack to persist.
|
|
131
|
+
*
|
|
132
|
+
* Three cases:
|
|
133
|
+
* 1. Match leaf: key exists, just update value (no structure change)
|
|
134
|
+
* 2. Branch: add new leaf to branch, or set branch value
|
|
135
|
+
* 3. Extension/Leaf with diverging path: create new branch at divergence, re-hang old + new leaf
|
|
136
|
+
*
|
|
137
|
+
* @private
|
|
138
|
+
*/
|
|
139
|
+
protected _updateNode(keyBytes: Uint8Array, value: Uint8Array, keyRemainder: Nibbles, stack: MPTNode[]): Promise<void>;
|
|
140
|
+
/**
|
|
141
|
+
* Removes a key from the trie. Handles two main cases:
|
|
142
|
+
* - Deleting from a leaf: remove leaf, possibly collapse parent branch
|
|
143
|
+
* - Deleting from a branch value: clear value, possibly collapse if branch has single child
|
|
144
|
+
*
|
|
145
|
+
* When a branch ends up with only one child after deletion, we collapse it into
|
|
146
|
+
* an extension (or merge with parent extension) to keep the trie minimal.
|
|
147
|
+
*
|
|
148
|
+
* @private
|
|
149
|
+
*/
|
|
150
|
+
protected _deleteNode(keyBytes: Uint8Array, stack: MPTNode[]): Promise<void>;
|
|
151
|
+
/**
|
|
152
|
+
* Persists the modified node stack to the DB. Processes nodes from leaf toward root,
|
|
153
|
+
* wiring each node's references (extension value, branch slot) to its child's hash.
|
|
154
|
+
*
|
|
155
|
+
* @param key - nibble path that corresponds to the stack
|
|
156
|
+
* @param stack - nodes from findPath/update, bottom (leaf) to top (root)
|
|
157
|
+
* @param opStack - put/del operations accumulated by _formatNode
|
|
158
|
+
*/
|
|
159
|
+
saveStack(pathNibbles: Nibbles, stack: MPTNode[], opStack: BatchDBOp[]): Promise<void>;
|
|
160
|
+
/**
|
|
161
|
+
* Serializes a node and either stores it (put) or schedules removal (del).
|
|
162
|
+
* Nodes ≥32 bytes (or top-level) are hashed and stored; smaller nodes are inlined as raw.
|
|
163
|
+
*
|
|
164
|
+
* @param node - the node to persist
|
|
165
|
+
* @param topLevel - if true, always store (root must be in DB)
|
|
166
|
+
* @param opStack - accumulates put/del operations for batch commit
|
|
167
|
+
* @param remove - if true, schedule del (used when pruning)
|
|
168
|
+
* @returns hash (for references) or raw encoding (for inline)
|
|
169
|
+
*/
|
|
170
|
+
_formatNode(node: MPTNode, topLevel: boolean, opStack: BatchDBOp[], remove?: boolean): Uint8Array | NodeReferenceOrRawMPTNode | BranchMPTNodeBranchValue[];
|
|
171
|
+
/**
|
|
172
|
+
* The given hash of operations (key additions or deletions) are executed on the trie
|
|
173
|
+
* (delete operations are only executed on DB with `deleteFromDB` set to `true`)
|
|
174
|
+
* @example
|
|
175
|
+
* const ops = [
|
|
176
|
+
* { type: 'del', key: Uint8Array.from('father') }
|
|
177
|
+
* , { type: 'put', key: Uint8Array.from('name'), value: Uint8Array.from('Yuri Irsenovich Kim') } // cspell:disable-line
|
|
178
|
+
* , { type: 'put', key: Uint8Array.from('dob'), value: Uint8Array.from('16 February 1941') }
|
|
179
|
+
* , { type: 'put', key: Uint8Array.from('spouse'), value: Uint8Array.from('Kim Young-sook') } // cspell:disable-line
|
|
180
|
+
* , { type: 'put', key: Uint8Array.from('occupation'), value: Uint8Array.from('Clown') }
|
|
181
|
+
* ]
|
|
182
|
+
* await trie.batch(ops)
|
|
183
|
+
* @param ops
|
|
184
|
+
*/
|
|
185
|
+
batch(ops: BatchDBOp[], skipKeyTransform?: boolean): Promise<void>;
|
|
186
|
+
/**
|
|
187
|
+
* Verifies that every key in the DB is reachable from the root. Used to ensure
|
|
188
|
+
* pruning is correct – unreachable keys indicate a bug or corrupt state.
|
|
189
|
+
*/
|
|
190
|
+
verifyPrunedIntegrity(): Promise<boolean>;
|
|
191
|
+
/**
|
|
192
|
+
* Returns a copy of the underlying trie.
|
|
193
|
+
*
|
|
194
|
+
* Note on db: the copy will create a reference to the
|
|
195
|
+
* same underlying database.
|
|
196
|
+
*
|
|
197
|
+
* Note on cache: for memory reasons a copy will by default
|
|
198
|
+
* not recreate a new LRU cache but initialize with cache
|
|
199
|
+
* being deactivated. This behavior can be overwritten by
|
|
200
|
+
* explicitly setting `cacheSize` as an option on the method.
|
|
201
|
+
*
|
|
202
|
+
* @param includeCheckpoints - If true and during a checkpoint, the copy will contain the checkpointing metadata and will use the same scratch as underlying db.
|
|
203
|
+
*/
|
|
204
|
+
shallowCopy(includeCheckpoints?: boolean, opts?: TrieShallowCopyOpts): MerklePatriciaTrie;
|
|
205
|
+
/**
|
|
206
|
+
* Persists the root hash in the underlying database
|
|
207
|
+
*/
|
|
208
|
+
persistRoot(): Promise<void>;
|
|
209
|
+
/**
|
|
210
|
+
* Finds all nodes that are stored directly in the db
|
|
211
|
+
* (some nodes are stored raw inside other nodes)
|
|
212
|
+
* called by {@link ScratchReadStream}
|
|
213
|
+
* @private
|
|
214
|
+
*/
|
|
215
|
+
protected _findDbNodes(onFound: FoundNodeFunction): Promise<void>;
|
|
216
|
+
/** Applies keyPrefix to a hash when multiple tries share a DB. */
|
|
217
|
+
protected _getDbKey(hash: Uint8Array): Uint8Array;
|
|
218
|
+
/** Builds del ops for nodes that will be replaced (pruning). */
|
|
219
|
+
protected _createPruneDeleteOps(stack: MPTNode[]): BatchDBOp[];
|
|
220
|
+
/** Applies key hashing (keccak) when useKeyHashing is enabled (Ethereum-style). */
|
|
221
|
+
protected appliedKey(key: Uint8Array): Uint8Array<ArrayBufferLike>;
|
|
222
|
+
protected hash(inputBytes: Uint8Array): Uint8Array;
|
|
223
|
+
/**
|
|
224
|
+
* Is the trie during a checkpoint phase?
|
|
225
|
+
*/
|
|
226
|
+
hasCheckpoints(): boolean;
|
|
227
|
+
/**
|
|
228
|
+
* Creates a checkpoint that can later be reverted to or committed.
|
|
229
|
+
* After this is called, all changes can be reverted until `commit` is called.
|
|
230
|
+
*/
|
|
231
|
+
checkpoint(): void;
|
|
232
|
+
/**
|
|
233
|
+
* Commits a checkpoint to disk, if current checkpoint is not nested.
|
|
234
|
+
* If nested, only sets the parent checkpoint as current checkpoint.
|
|
235
|
+
* @throws If not during a checkpoint phase
|
|
236
|
+
*/
|
|
237
|
+
commit(): Promise<void>;
|
|
238
|
+
/**
|
|
239
|
+
* Reverts the trie to the state it was at when `checkpoint` was first called.
|
|
240
|
+
* If during a nested checkpoint, sets root to most recent checkpoint, and sets
|
|
241
|
+
* parent checkpoint as current.
|
|
242
|
+
*/
|
|
243
|
+
revert(): Promise<void>;
|
|
244
|
+
/**
|
|
245
|
+
* Flushes all checkpoints, restoring the initial checkpoint state.
|
|
246
|
+
*/
|
|
247
|
+
flushCheckpoints(): void;
|
|
248
|
+
/**
|
|
249
|
+
* Returns a list of values stored in the trie
|
|
250
|
+
* @param startKey first unhashed key in the range to be returned (defaults to 0). Note, all keys must be of the same length or undefined behavior will result
|
|
251
|
+
* @param limit - the number of keys to be returned (undefined means all keys)
|
|
252
|
+
* @returns an object with two properties (a map of all key/value pairs in the trie - or in the specified range) and then a `nextKey` reference if a range is specified
|
|
253
|
+
*/
|
|
254
|
+
getValueMap(startKey?: bigint, limit?: number): Promise<{
|
|
255
|
+
values: {
|
|
256
|
+
[key: string]: string;
|
|
257
|
+
};
|
|
258
|
+
nextKey: null | string;
|
|
259
|
+
}>;
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=mpt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mpt.d.ts","sourceRoot":"","sources":["../../src/mpt.ts"],"names":[],"mappings":"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"}
|