@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.
Files changed (204) hide show
  1. package/README.md +448 -0
  2. package/dist/cjs/constructors.d.ts +12 -0
  3. package/dist/cjs/constructors.d.ts.map +1 -0
  4. package/dist/cjs/constructors.js +57 -0
  5. package/dist/cjs/constructors.js.map +1 -0
  6. package/dist/cjs/db/checkpointDB.d.ts +87 -0
  7. package/dist/cjs/db/checkpointDB.d.ts.map +1 -0
  8. package/dist/cjs/db/checkpointDB.js +258 -0
  9. package/dist/cjs/db/checkpointDB.js.map +1 -0
  10. package/dist/cjs/db/index.d.ts +2 -0
  11. package/dist/cjs/db/index.d.ts.map +1 -0
  12. package/dist/cjs/db/index.js +18 -0
  13. package/dist/cjs/db/index.js.map +1 -0
  14. package/dist/cjs/index.d.ts +8 -0
  15. package/dist/cjs/index.d.ts.map +1 -0
  16. package/dist/cjs/index.js +24 -0
  17. package/dist/cjs/index.js.map +1 -0
  18. package/dist/cjs/mpt.d.ts +261 -0
  19. package/dist/cjs/mpt.d.ts.map +1 -0
  20. package/dist/cjs/mpt.js +900 -0
  21. package/dist/cjs/mpt.js.map +1 -0
  22. package/dist/cjs/node/branch.d.ts +14 -0
  23. package/dist/cjs/node/branch.d.ts.map +1 -0
  24. package/dist/cjs/node/branch.js +52 -0
  25. package/dist/cjs/node/branch.js.map +1 -0
  26. package/dist/cjs/node/extension.d.ts +7 -0
  27. package/dist/cjs/node/extension.d.ts.map +1 -0
  28. package/dist/cjs/node/extension.js +14 -0
  29. package/dist/cjs/node/extension.js.map +1 -0
  30. package/dist/cjs/node/extensionOrLeafNodeBase.d.ts +15 -0
  31. package/dist/cjs/node/extensionOrLeafNodeBase.d.ts.map +1 -0
  32. package/dist/cjs/node/extensionOrLeafNodeBase.js +42 -0
  33. package/dist/cjs/node/extensionOrLeafNodeBase.js.map +1 -0
  34. package/dist/cjs/node/index.d.ts +5 -0
  35. package/dist/cjs/node/index.d.ts.map +1 -0
  36. package/dist/cjs/node/index.js +21 -0
  37. package/dist/cjs/node/index.js.map +1 -0
  38. package/dist/cjs/node/leaf.d.ts +7 -0
  39. package/dist/cjs/node/leaf.d.ts.map +1 -0
  40. package/dist/cjs/node/leaf.js +14 -0
  41. package/dist/cjs/node/leaf.js.map +1 -0
  42. package/dist/cjs/node/util.d.ts +8 -0
  43. package/dist/cjs/node/util.d.ts.map +1 -0
  44. package/dist/cjs/node/util.js +38 -0
  45. package/dist/cjs/node/util.js.map +1 -0
  46. package/dist/cjs/package.json +3 -0
  47. package/dist/cjs/proof/index.d.ts +3 -0
  48. package/dist/cjs/proof/index.d.ts.map +1 -0
  49. package/dist/cjs/proof/index.js +19 -0
  50. package/dist/cjs/proof/index.js.map +1 -0
  51. package/dist/cjs/proof/proof.d.ts +41 -0
  52. package/dist/cjs/proof/proof.d.ts.map +1 -0
  53. package/dist/cjs/proof/proof.js +119 -0
  54. package/dist/cjs/proof/proof.js.map +1 -0
  55. package/dist/cjs/proof/range.d.ts +35 -0
  56. package/dist/cjs/proof/range.d.ts.map +1 -0
  57. package/dist/cjs/proof/range.js +456 -0
  58. package/dist/cjs/proof/range.js.map +1 -0
  59. package/dist/cjs/types.d.ts +110 -0
  60. package/dist/cjs/types.d.ts.map +1 -0
  61. package/dist/cjs/types.js +6 -0
  62. package/dist/cjs/types.js.map +1 -0
  63. package/dist/cjs/util/asyncWalk.d.ts +20 -0
  64. package/dist/cjs/util/asyncWalk.d.ts.map +1 -0
  65. package/dist/cjs/util/asyncWalk.js +50 -0
  66. package/dist/cjs/util/asyncWalk.js.map +1 -0
  67. package/dist/cjs/util/encoding.d.ts +31 -0
  68. package/dist/cjs/util/encoding.d.ts.map +1 -0
  69. package/dist/cjs/util/encoding.js +200 -0
  70. package/dist/cjs/util/encoding.js.map +1 -0
  71. package/dist/cjs/util/genesisState.d.ts +6 -0
  72. package/dist/cjs/util/genesisState.d.ts.map +1 -0
  73. package/dist/cjs/util/genesisState.js +45 -0
  74. package/dist/cjs/util/genesisState.js.map +1 -0
  75. package/dist/cjs/util/hex.d.ts +20 -0
  76. package/dist/cjs/util/hex.d.ts.map +1 -0
  77. package/dist/cjs/util/hex.js +48 -0
  78. package/dist/cjs/util/hex.js.map +1 -0
  79. package/dist/cjs/util/index.d.ts +4 -0
  80. package/dist/cjs/util/index.d.ts.map +1 -0
  81. package/dist/cjs/util/index.js +20 -0
  82. package/dist/cjs/util/index.js.map +1 -0
  83. package/dist/cjs/util/nibbles.d.ts +30 -0
  84. package/dist/cjs/util/nibbles.d.ts.map +1 -0
  85. package/dist/cjs/util/nibbles.js +79 -0
  86. package/dist/cjs/util/nibbles.js.map +1 -0
  87. package/dist/cjs/util/walkController.d.ts +72 -0
  88. package/dist/cjs/util/walkController.d.ts.map +1 -0
  89. package/dist/cjs/util/walkController.js +138 -0
  90. package/dist/cjs/util/walkController.js.map +1 -0
  91. package/dist/esm/constructors.d.ts +12 -0
  92. package/dist/esm/constructors.d.ts.map +1 -0
  93. package/dist/esm/constructors.js +53 -0
  94. package/dist/esm/constructors.js.map +1 -0
  95. package/dist/esm/db/checkpointDB.d.ts +87 -0
  96. package/dist/esm/db/checkpointDB.d.ts.map +1 -0
  97. package/dist/esm/db/checkpointDB.js +254 -0
  98. package/dist/esm/db/checkpointDB.js.map +1 -0
  99. package/dist/esm/db/index.d.ts +2 -0
  100. package/dist/esm/db/index.d.ts.map +1 -0
  101. package/dist/esm/db/index.js +2 -0
  102. package/dist/esm/db/index.js.map +1 -0
  103. package/dist/esm/index.d.ts +8 -0
  104. package/dist/esm/index.d.ts.map +1 -0
  105. package/dist/esm/index.js +8 -0
  106. package/dist/esm/index.js.map +1 -0
  107. package/dist/esm/mpt.d.ts +261 -0
  108. package/dist/esm/mpt.d.ts.map +1 -0
  109. package/dist/esm/mpt.js +897 -0
  110. package/dist/esm/mpt.js.map +1 -0
  111. package/dist/esm/node/branch.d.ts +14 -0
  112. package/dist/esm/node/branch.d.ts.map +1 -0
  113. package/dist/esm/node/branch.js +48 -0
  114. package/dist/esm/node/branch.js.map +1 -0
  115. package/dist/esm/node/extension.d.ts +7 -0
  116. package/dist/esm/node/extension.d.ts.map +1 -0
  117. package/dist/esm/node/extension.js +10 -0
  118. package/dist/esm/node/extension.js.map +1 -0
  119. package/dist/esm/node/extensionOrLeafNodeBase.d.ts +15 -0
  120. package/dist/esm/node/extensionOrLeafNodeBase.d.ts.map +1 -0
  121. package/dist/esm/node/extensionOrLeafNodeBase.js +38 -0
  122. package/dist/esm/node/extensionOrLeafNodeBase.js.map +1 -0
  123. package/dist/esm/node/index.d.ts +5 -0
  124. package/dist/esm/node/index.d.ts.map +1 -0
  125. package/dist/esm/node/index.js +5 -0
  126. package/dist/esm/node/index.js.map +1 -0
  127. package/dist/esm/node/leaf.d.ts +7 -0
  128. package/dist/esm/node/leaf.d.ts.map +1 -0
  129. package/dist/esm/node/leaf.js +10 -0
  130. package/dist/esm/node/leaf.js.map +1 -0
  131. package/dist/esm/node/util.d.ts +8 -0
  132. package/dist/esm/node/util.d.ts.map +1 -0
  133. package/dist/esm/node/util.js +33 -0
  134. package/dist/esm/node/util.js.map +1 -0
  135. package/dist/esm/package.json +3 -0
  136. package/dist/esm/proof/index.d.ts +3 -0
  137. package/dist/esm/proof/index.d.ts.map +1 -0
  138. package/dist/esm/proof/index.js +3 -0
  139. package/dist/esm/proof/index.js.map +1 -0
  140. package/dist/esm/proof/proof.d.ts +41 -0
  141. package/dist/esm/proof/proof.d.ts.map +1 -0
  142. package/dist/esm/proof/proof.js +113 -0
  143. package/dist/esm/proof/proof.js.map +1 -0
  144. package/dist/esm/proof/range.d.ts +35 -0
  145. package/dist/esm/proof/range.d.ts.map +1 -0
  146. package/dist/esm/proof/range.js +453 -0
  147. package/dist/esm/proof/range.js.map +1 -0
  148. package/dist/esm/types.d.ts +110 -0
  149. package/dist/esm/types.d.ts.map +1 -0
  150. package/dist/esm/types.js +3 -0
  151. package/dist/esm/types.js.map +1 -0
  152. package/dist/esm/util/asyncWalk.d.ts +20 -0
  153. package/dist/esm/util/asyncWalk.d.ts.map +1 -0
  154. package/dist/esm/util/asyncWalk.js +47 -0
  155. package/dist/esm/util/asyncWalk.js.map +1 -0
  156. package/dist/esm/util/encoding.d.ts +31 -0
  157. package/dist/esm/util/encoding.d.ts.map +1 -0
  158. package/dist/esm/util/encoding.js +188 -0
  159. package/dist/esm/util/encoding.js.map +1 -0
  160. package/dist/esm/util/genesisState.d.ts +6 -0
  161. package/dist/esm/util/genesisState.d.ts.map +1 -0
  162. package/dist/esm/util/genesisState.js +42 -0
  163. package/dist/esm/util/genesisState.js.map +1 -0
  164. package/dist/esm/util/hex.d.ts +20 -0
  165. package/dist/esm/util/hex.d.ts.map +1 -0
  166. package/dist/esm/util/hex.js +43 -0
  167. package/dist/esm/util/hex.js.map +1 -0
  168. package/dist/esm/util/index.d.ts +4 -0
  169. package/dist/esm/util/index.d.ts.map +1 -0
  170. package/dist/esm/util/index.js +4 -0
  171. package/dist/esm/util/index.js.map +1 -0
  172. package/dist/esm/util/nibbles.d.ts +30 -0
  173. package/dist/esm/util/nibbles.d.ts.map +1 -0
  174. package/dist/esm/util/nibbles.js +73 -0
  175. package/dist/esm/util/nibbles.js.map +1 -0
  176. package/dist/esm/util/walkController.d.ts +72 -0
  177. package/dist/esm/util/walkController.d.ts.map +1 -0
  178. package/dist/esm/util/walkController.js +134 -0
  179. package/dist/esm/util/walkController.js.map +1 -0
  180. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
  181. package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
  182. package/package.json +85 -0
  183. package/src/constructors.ts +71 -0
  184. package/src/db/checkpointDB.ts +298 -0
  185. package/src/db/index.ts +1 -0
  186. package/src/index.ts +7 -0
  187. package/src/mpt.ts +1090 -0
  188. package/src/node/branch.ts +60 -0
  189. package/src/node/extension.ts +13 -0
  190. package/src/node/extensionOrLeafNodeBase.ts +54 -0
  191. package/src/node/index.ts +4 -0
  192. package/src/node/leaf.ts +13 -0
  193. package/src/node/util.ts +35 -0
  194. package/src/proof/index.ts +2 -0
  195. package/src/proof/proof.ts +135 -0
  196. package/src/proof/range.ts +542 -0
  197. package/src/types.ts +151 -0
  198. package/src/util/asyncWalk.ts +60 -0
  199. package/src/util/encoding.ts +209 -0
  200. package/src/util/genesisState.ts +52 -0
  201. package/src/util/hex.ts +47 -0
  202. package/src/util/index.ts +3 -0
  203. package/src/util/nibbles.ts +80 -0
  204. package/src/util/walkController.ts +172 -0
@@ -0,0 +1,72 @@
1
+ import { PrioritizedTaskExecutor } from '@feelyourprotocol/util';
2
+ import { BranchMPTNode } from '../node/index.ts';
3
+ import type { MerklePatriciaTrie } from '../mpt.ts';
4
+ import type { FoundNodeFunction, MPTNode, Nibbles, NodeReferenceOrRawMPTNode } from '../types.ts';
5
+ /**
6
+ * Interface to control how the trie is being traversed. Schedules node visits via a
7
+ * prioritized task queue and invokes the provided callback for each node.
8
+ *
9
+ * Used by {@link MerklePatriciaTrie.findPath}, {@link MerklePatriciaTrie.walkTrie}, etc.
10
+ */
11
+ export declare class WalkController {
12
+ /** The {@link FoundNodeFunction} to call when a node is found. */
13
+ readonly onNode: FoundNodeFunction;
14
+ /** Task executor that prioritizes node visits (shorter paths first). */
15
+ readonly taskExecutor: PrioritizedTaskExecutor;
16
+ /** The trie being walked. */
17
+ readonly trie: MerklePatriciaTrie;
18
+ private _resolvePromise;
19
+ private _rejectPromise;
20
+ /**
21
+ * @param onNode - The {@link FoundNodeFunction} to call when a node is found.
22
+ * @param trie - The trie to walk on.
23
+ * @param poolSize - The size of the task queue.
24
+ */
25
+ private constructor();
26
+ /**
27
+ * Creates and starts an async walk over a trie from the given root.
28
+ * Resolves when all reachable nodes have been visited and no new tasks were scheduled.
29
+ *
30
+ * @param onNode - The {@link FoundNodeFunction} to call when a node is found.
31
+ * @param trie - The trie to walk on.
32
+ * @param rootHash - The root hash (32-byte keccak) to start walking from.
33
+ * @param poolSize - Task execution pool size to prevent OOM errors. Defaults to 500.
34
+ * @returns A Promise that resolves when the walk is finished.
35
+ */
36
+ static newWalk(onNode: FoundNodeFunction, trie: MerklePatriciaTrie, rootHash: Uint8Array, poolSize?: number): Promise<void>;
37
+ private _startWalk;
38
+ /**
39
+ * Runs all children of a node. Priority of these nodes is the key length of the children.
40
+ * Used when walking an Extension or when exploring all branches of a Branch node.
41
+ *
42
+ * @param node - Node to get all children of and call onNode on.
43
+ * @param currentKeyNibbles - The current key (nibbles) which would yield the `node` when
44
+ * trying to get this node with a `get` operation. Defaults to `[]`.
45
+ * @returns `void`
46
+ */
47
+ allChildren(node: MPTNode, currentKeyNibbles?: Nibbles): void;
48
+ /**
49
+ * Pushes a node to the queue. If the queue has capacity, the node is executed immediately,
50
+ * otherwise it is queued for later execution.
51
+ *
52
+ * @param nodeRef - A node reference (32-byte keccak hash or raw encoding) to enqueue.
53
+ * @param currentKeyNibbles - The current key (nibbles) corresponding to this node. Defaults to `[]`.
54
+ * @param priority - Optional priority. Defaults to key length.
55
+ * @returns `void`
56
+ */
57
+ pushNodeToQueue(nodeRef: NodeReferenceOrRawMPTNode, currentKeyNibbles?: Nibbles, priority?: number): void;
58
+ /**
59
+ * Pushes a branch of a certain BranchMPTNode to the event queue.
60
+ * Used by findPath when following a specific key (only one child index is traversed).
61
+ *
62
+ * @param node - The BranchMPTNode to select a branch on.
63
+ * @param currentKeyNibbles - The current key which leads to the corresponding node. Defaults to `[]`.
64
+ * @param childIndex - The child index (0–15) to add to the event queue.
65
+ * @param priority - Optional priority of the event. Defaults to the total key length.
66
+ * @returns `void`
67
+ * @throws If `node` is not a BranchMPTNode or if the branch at `childIndex` is empty.
68
+ */
69
+ onlyBranchIndex(node: BranchMPTNode, currentKeyNibbles: Nibbles | undefined, childIndex: number, priority?: number): void;
70
+ private _processNode;
71
+ }
72
+ //# sourceMappingURL=walkController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walkController.d.ts","sourceRoot":"","sources":["../../../src/util/walkController.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAEtF,OAAO,EAAE,aAAa,EAAiC,MAAM,kBAAkB,CAAA;AAE/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAEjG;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAA;IAElC,wEAAwE;IACxE,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAA;IAE9C,6BAA6B;IAC7B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IAEjC,OAAO,CAAC,eAAe,CAAY;IACnC,OAAO,CAAC,cAAc,CAA0B;IAEhD;;;;OAIG;IACH,OAAO;IAQP;;;;;;;;;OASG;WACU,OAAO,CAClB,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,UAAU,EACpB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;YAKF,UAAU;IAexB;;;;;;;;OAQG;IACH,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAE,OAAY,GAAG,IAAI;IAqBjE;;;;;;;;OAQG;IACH,eAAe,CACb,OAAO,EAAE,yBAAyB,EAClC,iBAAiB,GAAE,OAAY,EAC/B,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI;IAeP;;;;;;;;;;OAUG;IACH,eAAe,CACb,IAAI,EAAE,aAAa,EACnB,iBAAiB,EAAE,OAAO,YAAK,EAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI;IAaP,OAAO,CAAC,YAAY;CAUrB"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WalkController = void 0;
4
+ const util_1 = require("@feelyourprotocol/util");
5
+ const index_ts_1 = require("../node/index.js");
6
+ /**
7
+ * Interface to control how the trie is being traversed. Schedules node visits via a
8
+ * prioritized task queue and invokes the provided callback for each node.
9
+ *
10
+ * Used by {@link MerklePatriciaTrie.findPath}, {@link MerklePatriciaTrie.walkTrie}, etc.
11
+ */
12
+ class WalkController {
13
+ /**
14
+ * @param onNode - The {@link FoundNodeFunction} to call when a node is found.
15
+ * @param trie - The trie to walk on.
16
+ * @param poolSize - The size of the task queue.
17
+ */
18
+ constructor(onNode, trie, poolSize) {
19
+ this.onNode = onNode;
20
+ this.taskExecutor = new util_1.PrioritizedTaskExecutor(poolSize);
21
+ this.trie = trie;
22
+ this._resolvePromise = () => { };
23
+ this._rejectPromise = () => { };
24
+ }
25
+ /**
26
+ * Creates and starts an async walk over a trie from the given root.
27
+ * Resolves when all reachable nodes have been visited and no new tasks were scheduled.
28
+ *
29
+ * @param onNode - The {@link FoundNodeFunction} to call when a node is found.
30
+ * @param trie - The trie to walk on.
31
+ * @param rootHash - The root hash (32-byte keccak) to start walking from.
32
+ * @param poolSize - Task execution pool size to prevent OOM errors. Defaults to 500.
33
+ * @returns A Promise that resolves when the walk is finished.
34
+ */
35
+ static async newWalk(onNode, trie, rootHash, poolSize) {
36
+ const controller = new WalkController(onNode, trie, poolSize ?? 500);
37
+ await controller._startWalk(rootHash);
38
+ }
39
+ async _startWalk(rootHash) {
40
+ return new Promise((resolve, reject) => {
41
+ this._resolvePromise = resolve;
42
+ this._rejectPromise = reject;
43
+ this.trie
44
+ .lookupNode(rootHash)
45
+ .then((rootNode) => {
46
+ this._processNode(rootHash, rootNode, []);
47
+ })
48
+ .catch((error) => {
49
+ this._rejectPromise(error);
50
+ });
51
+ });
52
+ }
53
+ /**
54
+ * Runs all children of a node. Priority of these nodes is the key length of the children.
55
+ * Used when walking an Extension or when exploring all branches of a Branch node.
56
+ *
57
+ * @param node - Node to get all children of and call onNode on.
58
+ * @param currentKeyNibbles - The current key (nibbles) which would yield the `node` when
59
+ * trying to get this node with a `get` operation. Defaults to `[]`.
60
+ * @returns `void`
61
+ */
62
+ allChildren(node, currentKeyNibbles = []) {
63
+ if (node instanceof index_ts_1.LeafMPTNode) {
64
+ return;
65
+ }
66
+ let childEntries;
67
+ if (node instanceof index_ts_1.ExtensionMPTNode) {
68
+ childEntries = [[node.key(), node.value()]];
69
+ }
70
+ else if (node instanceof index_ts_1.BranchMPTNode) {
71
+ childEntries = node
72
+ .getChildren()
73
+ .map(([branchIndex, branchRef]) => [[branchIndex], branchRef]);
74
+ }
75
+ else {
76
+ return;
77
+ }
78
+ for (const [keyExtension, childRef] of childEntries) {
79
+ const childKeyNibbles = currentKeyNibbles.concat(keyExtension);
80
+ const taskPriority = childKeyNibbles.length;
81
+ this.pushNodeToQueue(childRef, childKeyNibbles, taskPriority);
82
+ }
83
+ }
84
+ /**
85
+ * Pushes a node to the queue. If the queue has capacity, the node is executed immediately,
86
+ * otherwise it is queued for later execution.
87
+ *
88
+ * @param nodeRef - A node reference (32-byte keccak hash or raw encoding) to enqueue.
89
+ * @param currentKeyNibbles - The current key (nibbles) corresponding to this node. Defaults to `[]`.
90
+ * @param priority - Optional priority. Defaults to key length.
91
+ * @returns `void`
92
+ */
93
+ pushNodeToQueue(nodeRef, currentKeyNibbles = [], priority) {
94
+ const taskPriority = priority ?? currentKeyNibbles.length;
95
+ this.taskExecutor.executeOrQueue(taskPriority, (taskFinishedCallback) => {
96
+ this.trie
97
+ .lookupNode(nodeRef)
98
+ .then((decodedNode) => {
99
+ taskFinishedCallback();
100
+ this._processNode(nodeRef, decodedNode, currentKeyNibbles);
101
+ })
102
+ .catch((error) => {
103
+ this._rejectPromise(error);
104
+ });
105
+ });
106
+ }
107
+ /**
108
+ * Pushes a branch of a certain BranchMPTNode to the event queue.
109
+ * Used by findPath when following a specific key (only one child index is traversed).
110
+ *
111
+ * @param node - The BranchMPTNode to select a branch on.
112
+ * @param currentKeyNibbles - The current key which leads to the corresponding node. Defaults to `[]`.
113
+ * @param childIndex - The child index (0–15) to add to the event queue.
114
+ * @param priority - Optional priority of the event. Defaults to the total key length.
115
+ * @returns `void`
116
+ * @throws If `node` is not a BranchMPTNode or if the branch at `childIndex` is empty.
117
+ */
118
+ onlyBranchIndex(node, currentKeyNibbles = [], childIndex, priority) {
119
+ if (!(node instanceof index_ts_1.BranchMPTNode)) {
120
+ throw (0, util_1.EthereumJSErrorWithoutCode)('Expected branch node');
121
+ }
122
+ const childRef = node.getBranch(childIndex);
123
+ if (!childRef) {
124
+ throw (0, util_1.EthereumJSErrorWithoutCode)('Could not get branch of childIndex');
125
+ }
126
+ const childKeyNibbles = currentKeyNibbles.concat(childIndex);
127
+ const taskPriority = priority ?? childKeyNibbles.length;
128
+ this.pushNodeToQueue(childRef, childKeyNibbles, taskPriority);
129
+ }
130
+ _processNode(nodeRef, node, currentKeyNibbles) {
131
+ this.onNode(nodeRef, node, currentKeyNibbles, this);
132
+ if (this.taskExecutor.finished()) {
133
+ this._resolvePromise();
134
+ }
135
+ }
136
+ }
137
+ exports.WalkController = WalkController;
138
+ //# sourceMappingURL=walkController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walkController.js","sourceRoot":"","sources":["../../../src/util/walkController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { MerklePatriciaTrie } from './index.ts';
2
+ import type { MPTOpts, Proof } from './index.ts';
3
+ export declare function createMPT(opts?: MPTOpts): Promise<MerklePatriciaTrie>;
4
+ /**
5
+ * Create a trie from a given (EIP-1186)[https://eips.ethereum.org/EIPS/eip-1186] proof. A proof contains the encoded trie nodes
6
+ * from the root node to the leaf node storing state data.
7
+ * @param proof an EIP-1186 proof to create trie from
8
+ * @param trieOpts trie opts to be applied to returned trie
9
+ * @returns new trie created from given proof
10
+ */
11
+ export declare function createMPTFromProof(proof: Proof, trieOpts?: MPTOpts): Promise<MerklePatriciaTrie>;
12
+ //# sourceMappingURL=constructors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructors.d.ts","sourceRoot":"","sources":["../../src/constructors.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,kBAAkB,EAAyC,MAAM,YAAY,CAAA;AAEtF,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEhD,wBAAsB,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,+BAyC7C;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,OAAO,+BAOxE"}
@@ -0,0 +1,53 @@
1
+ import { KeyEncoding, ValueEncoding, bytesToUnprefixedHex, concatBytes, unprefixedHexToBytes, } from '@feelyourprotocol/util';
2
+ import { keccak_256 } from '@noble/hashes/sha3.js';
3
+ import { MerklePatriciaTrie, ROOT_DB_KEY, updateMPTFromMerkleProof } from "./index.js";
4
+ export async function createMPT(opts) {
5
+ const keccakFunction = opts?.common?.customCrypto.keccak256 ?? opts?.useKeyHashingFunction ?? keccak_256;
6
+ let key = ROOT_DB_KEY;
7
+ const encoding = opts?.valueEncoding === ValueEncoding.Bytes ? ValueEncoding.Bytes : ValueEncoding.String;
8
+ if (opts?.useKeyHashing === true) {
9
+ key = keccakFunction.call(undefined, ROOT_DB_KEY);
10
+ }
11
+ if (opts?.keyPrefix !== undefined) {
12
+ key = concatBytes(opts.keyPrefix, key);
13
+ }
14
+ if (opts?.db !== undefined && opts?.useRootPersistence === true) {
15
+ if (opts?.root === undefined) {
16
+ // Using deprecated bytesToUnprefixedHex for performance: used as database keys (string encoding).
17
+ const root = await opts?.db.get(bytesToUnprefixedHex(key), {
18
+ keyEncoding: KeyEncoding.String,
19
+ valueEncoding: encoding,
20
+ });
21
+ if (typeof root === 'string') {
22
+ opts.root = unprefixedHexToBytes(root);
23
+ }
24
+ else {
25
+ opts.root = root;
26
+ }
27
+ }
28
+ else {
29
+ // Using deprecated bytesToUnprefixedHex for performance: used as database keys/values (string encoding).
30
+ await opts?.db.put(bytesToUnprefixedHex(key), encoding === ValueEncoding.Bytes ? opts.root : bytesToUnprefixedHex(opts.root), {
31
+ keyEncoding: KeyEncoding.String,
32
+ valueEncoding: encoding,
33
+ });
34
+ }
35
+ }
36
+ return new MerklePatriciaTrie(opts);
37
+ }
38
+ /**
39
+ * Create a trie from a given (EIP-1186)[https://eips.ethereum.org/EIPS/eip-1186] proof. A proof contains the encoded trie nodes
40
+ * from the root node to the leaf node storing state data.
41
+ * @param proof an EIP-1186 proof to create trie from
42
+ * @param trieOpts trie opts to be applied to returned trie
43
+ * @returns new trie created from given proof
44
+ */
45
+ export async function createMPTFromProof(proof, trieOpts) {
46
+ const shouldVerifyRoot = trieOpts?.root !== undefined;
47
+ const trie = new MerklePatriciaTrie(trieOpts);
48
+ const root = await updateMPTFromMerkleProof(trie, proof, shouldVerifyRoot);
49
+ trie.root(root);
50
+ await trie.persistRoot();
51
+ return trie;
52
+ }
53
+ //# sourceMappingURL=constructors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructors.js","sourceRoot":"","sources":["../../src/constructors.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,oBAAoB,GACrB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAItF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc;IAC5C,MAAM,cAAc,GAClB,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,SAAS,IAAI,IAAI,EAAE,qBAAqB,IAAI,UAAU,CAAA;IACnF,IAAI,GAAG,GAAG,WAAW,CAAA;IAErB,MAAM,QAAQ,GACZ,IAAI,EAAE,aAAa,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAA;IAE1F,IAAI,IAAI,EAAE,aAAa,KAAK,IAAI,EAAE,CAAC;QACjC,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAe,CAAA;IACjE,CAAC;IACD,IAAI,IAAI,EAAE,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,IAAI,EAAE,EAAE,KAAK,SAAS,IAAI,IAAI,EAAE,kBAAkB,KAAK,IAAI,EAAE,CAAC;QAChE,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,kGAAkG;YAClG,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;gBACzD,WAAW,EAAE,WAAW,CAAC,MAAM;gBAC/B,aAAa,EAAE,QAAQ;aACxB,CAAC,CAAA;YACF,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAA;YACxC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;YAClB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,yGAAyG;YACzG,MAAM,IAAI,EAAE,EAAE,CAAC,GAAG,CAChB,oBAAoB,CAAC,GAAG,CAAC,EACzB,QAAQ,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAC9E;gBACE,WAAW,EAAE,WAAW,CAAC,MAAM;gBAC/B,aAAa,EAAE,QAAQ;aACxB,CACF,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAA;AACrC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAY,EAAE,QAAkB;IACvE,MAAM,gBAAgB,GAAG,QAAQ,EAAE,IAAI,KAAK,SAAS,CAAA;IACrD,MAAM,IAAI,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IAC7C,MAAM,IAAI,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAA;IAC1E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACf,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;IACxB,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { LRUCache } from 'lru-cache';
2
+ import type { BatchDBOp, DB } from '@feelyourprotocol/util';
3
+ import type { Checkpoint, CheckpointDBOpts } from '../types.ts';
4
+ /**
5
+ * DB is a thin wrapper around the underlying levelup db,
6
+ * which validates inputs and sets encoding type.
7
+ */
8
+ export declare class CheckpointDB implements DB {
9
+ checkpoints: Checkpoint[];
10
+ db: DB<string, string | Uint8Array>;
11
+ readonly cacheSize: number;
12
+ private readonly valueEncoding;
13
+ protected _cache?: LRUCache<string, Uint8Array>;
14
+ _stats: {
15
+ cache: {
16
+ reads: number;
17
+ hits: number;
18
+ writes: number;
19
+ };
20
+ db: {
21
+ reads: number;
22
+ hits: number;
23
+ writes: number;
24
+ };
25
+ };
26
+ /**
27
+ * Initialize a DB instance.
28
+ */
29
+ constructor(opts: CheckpointDBOpts);
30
+ /**
31
+ * Flush the checkpoints and use the given checkpoints instead.
32
+ * @param {Checkpoint[]} checkpoints
33
+ */
34
+ setCheckpoints(checkpoints: Checkpoint[]): void;
35
+ /**
36
+ * Is the DB during a checkpoint phase?
37
+ */
38
+ hasCheckpoints(): boolean;
39
+ /**
40
+ * Adds a new checkpoint to the stack
41
+ * @param root
42
+ */
43
+ checkpoint(root: Uint8Array): void;
44
+ /**
45
+ * Commits the latest checkpoint
46
+ */
47
+ commit(): Promise<void>;
48
+ /**
49
+ * Reverts the latest checkpoint
50
+ */
51
+ revert(): Promise<Uint8Array<ArrayBufferLike>>;
52
+ /**
53
+ * @inheritDoc
54
+ */
55
+ get(key: Uint8Array): Promise<Uint8Array | undefined>;
56
+ /**
57
+ * @inheritDoc
58
+ */
59
+ put(key: Uint8Array, value: Uint8Array): Promise<void>;
60
+ /**
61
+ * @inheritDoc
62
+ */
63
+ del(key: Uint8Array): Promise<void>;
64
+ /**
65
+ * @inheritDoc
66
+ */
67
+ batch(opStack: BatchDBOp[]): Promise<void>;
68
+ stats(reset?: boolean): {
69
+ size: number;
70
+ cache: {
71
+ reads: number;
72
+ hits: number;
73
+ writes: number;
74
+ };
75
+ db: {
76
+ reads: number;
77
+ hits: number;
78
+ writes: number;
79
+ };
80
+ };
81
+ /**
82
+ * @inheritDoc
83
+ */
84
+ shallowCopy(): CheckpointDB;
85
+ open(): Promise<void>;
86
+ }
87
+ //# sourceMappingURL=checkpointDB.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpointDB.d.ts","sourceRoot":"","sources":["../../../src/db/checkpointDB.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,KAAK,EAAE,SAAS,EAAE,EAAE,EAAgB,MAAM,kBAAkB,CAAA;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE/D;;;GAGG;AACH,qBAAa,YAAa,YAAW,EAAE;IAC9B,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAA;IAC1C,SAAgB,SAAS,EAAE,MAAM,CAAA;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAW7C,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAG/C,MAAM;;;;;;;;;;;MAWL;IAED;;OAEG;gBACS,IAAI,EAAE,gBAAgB;IAelC;;;OAGG;IACH,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE;IAWxC;;OAEG;IACH,cAAc;IAId;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,UAAU;IAI3B;;OAEG;IACG,MAAM;IA6BZ;;OAEG;IACG,MAAM;IAKZ;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IA2C3D;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB5D;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBzC;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiChD,KAAK,CAAC,KAAK,UAAO;;;;;;;;;;;;;IAmBlB;;OAEG;IACH,WAAW,IAAI,YAAY;IAQ3B,IAAI;CAGL"}
@@ -0,0 +1,254 @@
1
+ import { KeyEncoding, ValueEncoding, bytesToUnprefixedHex, unprefixedHexToBytes, } from '@feelyourprotocol/util';
2
+ import { LRUCache } from 'lru-cache';
3
+ /**
4
+ * DB is a thin wrapper around the underlying levelup db,
5
+ * which validates inputs and sets encoding type.
6
+ */
7
+ export class CheckpointDB {
8
+ /**
9
+ * Initialize a DB instance.
10
+ */
11
+ constructor(opts) {
12
+ // protected _cache?: LRUCache<string, Uint8Array | undefined>
13
+ this._stats = {
14
+ cache: {
15
+ reads: 0,
16
+ hits: 0,
17
+ writes: 0,
18
+ },
19
+ db: {
20
+ reads: 0,
21
+ hits: 0,
22
+ writes: 0,
23
+ },
24
+ };
25
+ this.db = opts.db;
26
+ this.cacheSize = opts.cacheSize ?? 0;
27
+ this.valueEncoding = opts.valueEncoding ?? ValueEncoding.String;
28
+ // Roots of trie at the moment of checkpoint
29
+ this.checkpoints = [];
30
+ if (this.cacheSize > 0) {
31
+ this._cache = new LRUCache({
32
+ max: this.cacheSize,
33
+ updateAgeOnGet: true,
34
+ });
35
+ }
36
+ }
37
+ /**
38
+ * Flush the checkpoints and use the given checkpoints instead.
39
+ * @param {Checkpoint[]} checkpoints
40
+ */
41
+ setCheckpoints(checkpoints) {
42
+ this.checkpoints = [];
43
+ for (let i = 0; i < checkpoints.length; i++) {
44
+ this.checkpoints.push({
45
+ root: checkpoints[i].root,
46
+ keyValueMap: new Map(checkpoints[i].keyValueMap),
47
+ });
48
+ }
49
+ }
50
+ /**
51
+ * Is the DB during a checkpoint phase?
52
+ */
53
+ hasCheckpoints() {
54
+ return this.checkpoints.length > 0;
55
+ }
56
+ /**
57
+ * Adds a new checkpoint to the stack
58
+ * @param root
59
+ */
60
+ checkpoint(root) {
61
+ this.checkpoints.push({ keyValueMap: new Map(), root });
62
+ }
63
+ /**
64
+ * Commits the latest checkpoint
65
+ */
66
+ async commit() {
67
+ const { keyValueMap } = this.checkpoints.pop();
68
+ if (!this.hasCheckpoints()) {
69
+ // This was the final checkpoint, we should now commit and flush everything to disk
70
+ const batchOp = [];
71
+ for (const [key, value] of keyValueMap.entries()) {
72
+ if (value === undefined) {
73
+ batchOp.push({
74
+ type: 'del',
75
+ key: unprefixedHexToBytes(key),
76
+ });
77
+ }
78
+ else {
79
+ batchOp.push({
80
+ type: 'put',
81
+ key: unprefixedHexToBytes(key),
82
+ value,
83
+ });
84
+ }
85
+ }
86
+ await this.batch(batchOp);
87
+ }
88
+ else {
89
+ // dump everything into the current (higher level) diff cache
90
+ const currentKeyValueMap = this.checkpoints[this.checkpoints.length - 1].keyValueMap;
91
+ for (const [key, value] of keyValueMap.entries()) {
92
+ currentKeyValueMap.set(key, value);
93
+ }
94
+ }
95
+ }
96
+ /**
97
+ * Reverts the latest checkpoint
98
+ */
99
+ async revert() {
100
+ const { root } = this.checkpoints.pop();
101
+ return root;
102
+ }
103
+ /**
104
+ * @inheritDoc
105
+ */
106
+ async get(key) {
107
+ // Using deprecated bytesToUnprefixedHex for performance: used as cache/database keys (string encoding).
108
+ const keyHex = bytesToUnprefixedHex(key);
109
+ if (this._cache !== undefined) {
110
+ const value = this._cache.get(keyHex);
111
+ this._stats.cache.reads += 1;
112
+ if (value !== undefined) {
113
+ this._stats.cache.hits += 1;
114
+ return value;
115
+ }
116
+ }
117
+ // Lookup the value in our diff cache. We return the latest checkpointed value (which should be the value on disk)
118
+ for (let index = this.checkpoints.length - 1; index >= 0; index--) {
119
+ if (this.checkpoints[index].keyValueMap.has(keyHex)) {
120
+ return this.checkpoints[index].keyValueMap.get(keyHex);
121
+ }
122
+ }
123
+ // Nothing has been found in diff cache, look up from disk
124
+ const value = await this.db.get(keyHex, {
125
+ keyEncoding: KeyEncoding.String,
126
+ valueEncoding: this.valueEncoding,
127
+ });
128
+ this._stats.db.reads += 1;
129
+ if (value !== undefined) {
130
+ this._stats.db.hits += 1;
131
+ }
132
+ const returnValue = value !== undefined
133
+ ? value instanceof Uint8Array
134
+ ? value
135
+ : unprefixedHexToBytes(value)
136
+ : undefined;
137
+ this._cache?.set(keyHex, returnValue);
138
+ if (this.hasCheckpoints()) {
139
+ // Since we are a checkpoint, put this value in diff cache,
140
+ // so future `get` calls will not look the key up again from disk.
141
+ this.checkpoints[this.checkpoints.length - 1].keyValueMap.set(keyHex, returnValue);
142
+ }
143
+ return returnValue;
144
+ }
145
+ /**
146
+ * @inheritDoc
147
+ */
148
+ async put(key, value) {
149
+ // Using deprecated bytesToUnprefixedHex for performance: used as cache/database keys and values (string encoding).
150
+ const keyHex = bytesToUnprefixedHex(key);
151
+ if (this.hasCheckpoints()) {
152
+ // put value in diff cache
153
+ this.checkpoints[this.checkpoints.length - 1].keyValueMap.set(keyHex, value);
154
+ }
155
+ else {
156
+ const valuePut = this.valueEncoding === ValueEncoding.Bytes ? value : bytesToUnprefixedHex(value);
157
+ await this.db.put(keyHex, valuePut, {
158
+ keyEncoding: KeyEncoding.String,
159
+ valueEncoding: this.valueEncoding,
160
+ });
161
+ this._stats.db.writes += 1;
162
+ if (this._cache !== undefined) {
163
+ this._cache.set(keyHex, value);
164
+ this._stats.cache.writes += 1;
165
+ }
166
+ }
167
+ }
168
+ /**
169
+ * @inheritDoc
170
+ */
171
+ async del(key) {
172
+ // Using deprecated bytesToUnprefixedHex for performance: used as cache/database keys (string encoding).
173
+ const keyHex = bytesToUnprefixedHex(key);
174
+ if (this.hasCheckpoints()) {
175
+ // delete the value in the current diff cache
176
+ this.checkpoints[this.checkpoints.length - 1].keyValueMap.set(keyHex, undefined);
177
+ }
178
+ else {
179
+ // delete the value on disk
180
+ await this.db.del(keyHex, {
181
+ keyEncoding: KeyEncoding.String,
182
+ });
183
+ this._stats.db.writes += 1;
184
+ if (this._cache !== undefined) {
185
+ this._cache.set(keyHex, undefined);
186
+ this._stats.cache.writes += 1;
187
+ }
188
+ }
189
+ }
190
+ /**
191
+ * @inheritDoc
192
+ */
193
+ async batch(opStack) {
194
+ if (this.hasCheckpoints()) {
195
+ for (const op of opStack) {
196
+ if (op.type === 'put') {
197
+ await this.put(op.key, op.value);
198
+ }
199
+ else if (op.type === 'del') {
200
+ await this.del(op.key);
201
+ }
202
+ }
203
+ }
204
+ else {
205
+ // Using deprecated bytesToUnprefixedHex for performance: used as database keys/values (string encoding).
206
+ const convertedOps = opStack.map((op) => {
207
+ const convertedOp = {
208
+ key: bytesToUnprefixedHex(op.key),
209
+ value: op.type === 'put' ? op.value : undefined,
210
+ type: op.type,
211
+ opts: { ...op.opts, ...{ valueEncoding: this.valueEncoding } },
212
+ };
213
+ this._stats.db.writes += 1;
214
+ if (op.type === 'put' && this.valueEncoding === ValueEncoding.String) {
215
+ convertedOp.value = bytesToUnprefixedHex(convertedOp.value);
216
+ }
217
+ return convertedOp;
218
+ });
219
+ await this.db.batch(convertedOps);
220
+ }
221
+ }
222
+ stats(reset = true) {
223
+ const stats = { ...this._stats, size: this._cache?.size ?? 0 };
224
+ if (reset) {
225
+ this._stats = {
226
+ cache: {
227
+ reads: 0,
228
+ hits: 0,
229
+ writes: 0,
230
+ },
231
+ db: {
232
+ reads: 0,
233
+ hits: 0,
234
+ writes: 0,
235
+ },
236
+ };
237
+ }
238
+ return stats;
239
+ }
240
+ /**
241
+ * @inheritDoc
242
+ */
243
+ shallowCopy() {
244
+ return new CheckpointDB({
245
+ db: this.db,
246
+ cacheSize: this.cacheSize,
247
+ valueEncoding: this.valueEncoding,
248
+ });
249
+ }
250
+ open() {
251
+ return Promise.resolve();
252
+ }
253
+ }
254
+ //# sourceMappingURL=checkpointDB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpointDB.js","sourceRoot":"","sources":["../../../src/db/checkpointDB.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './checkpointDB.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/db/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA"}