@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,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports._walkTrie = _walkTrie;
4
+ const rlp_1 = require("@feelyourprotocol/rlp");
5
+ const util_1 = require("@feelyourprotocol/util");
6
+ const branch_ts_1 = require("../node/branch.js");
7
+ const extension_ts_1 = require("../node/extension.js");
8
+ /**
9
+ * Walk MerklePatriciaTrie via async generator
10
+ * @param nodeHash - The root key to walk on.
11
+ * @param currentKey - The current (partial) key.
12
+ * @param onFound - Called on every node found (before filter)
13
+ * @param filter - Filter nodes yielded by the generator.
14
+ * @param visited - Set of visited nodes
15
+ * @returns AsyncIterable<{ node: MPTNode; currentKey: number[] }>
16
+ * Iterate through nodes with
17
+ * `for await (const { node, currentKey } of trie._walkTrie(root)) { ... }`
18
+ */
19
+ async function* _walkTrie(nodeHash, currentKey = [], onFound = async (_trieNode, _key) => { }, filter = async (_trieNode, _key) => true, visited = new Set()) {
20
+ if ((0, util_1.equalsBytes)(nodeHash, this.EMPTY_TRIE_ROOT)) {
21
+ return;
22
+ }
23
+ try {
24
+ const node = await this.lookupNode(nodeHash);
25
+ if (node === undefined || visited.has((0, util_1.bytesToHex)(this.hash(node.serialize())))) {
26
+ return;
27
+ }
28
+ visited.add((0, util_1.bytesToHex)(this.hash(node.serialize())));
29
+ await onFound(node, currentKey);
30
+ if (await filter(node, currentKey)) {
31
+ yield { node: node, currentKey };
32
+ }
33
+ if (node instanceof branch_ts_1.BranchMPTNode) {
34
+ for (const [nibble, childNode] of node._branches.entries()) {
35
+ const nextKey = [...currentKey, nibble];
36
+ const _childNode = childNode instanceof Uint8Array ? childNode : this.hash(rlp_1.RLP.encode(childNode));
37
+ yield* _walkTrie.bind(this)(_childNode, nextKey, onFound, filter, visited);
38
+ }
39
+ }
40
+ else if (node instanceof extension_ts_1.ExtensionMPTNode) {
41
+ const childNode = node.value();
42
+ const nextKey = [...currentKey, ...node._nibbles];
43
+ yield* _walkTrie.bind(this)(childNode, nextKey, onFound, filter, visited);
44
+ }
45
+ }
46
+ catch {
47
+ return;
48
+ }
49
+ }
50
+ //# sourceMappingURL=asyncWalk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncWalk.js","sourceRoot":"","sources":["../../../src/util/asyncWalk.ts"],"names":[],"mappings":";;AAuBA,8BAoCC;AA3DD,yCAAqC;AACrC,2CAA0D;AAE1D,iDAAiD;AACjD,uDAAuD;AAQvD;;;;;;;;;;GAUG;AACI,KAAK,SAAS,CAAC,CAAC,SAAS,CAE9B,QAAoB,EACpB,aAAuB,EAAE,EACzB,UAAmB,KAAK,EAAE,SAAkB,EAAE,IAAc,EAAE,EAAE,GAAE,CAAC,EACnE,SAAqB,KAAK,EAAE,SAAkB,EAAE,IAAc,EAAE,EAAE,CAAC,IAAI,EACvE,UAAuB,IAAI,GAAG,EAAU;IAExC,IAAI,IAAA,kBAAW,EAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QAChD,OAAM;IACR,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;QAC5C,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,IAAA,iBAAU,EAAC,IAAI,CAAC,IAAI,CAAC,IAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,OAAM;QACR,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAA,iBAAU,EAAC,IAAI,CAAC,IAAI,CAAC,IAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;QACrD,MAAM,OAAO,CAAC,IAAK,EAAE,UAAU,CAAC,CAAA;QAChC,IAAI,MAAM,MAAM,CAAC,IAAK,EAAE,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,EAAE,IAAI,EAAE,IAAK,EAAE,UAAU,EAAE,CAAA;QACnC,CAAC;QACD,IAAI,IAAI,YAAY,yBAAa,EAAE,CAAC;YAClC,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC3D,MAAM,OAAO,GAAG,CAAC,GAAG,UAAU,EAAE,MAAM,CAAC,CAAA;gBACvC,MAAM,UAAU,GACd,SAAS,YAAY,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;gBAChF,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;YAC5E,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,YAAY,+BAAgB,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;YAC9B,MAAM,OAAO,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;YACjD,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QAC3E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAM;IACR,CAAC;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { Nibbles } from '../types.ts';
2
+ export declare const nibblesToBytes: (nibbles: Uint8Array) => Uint8Array<ArrayBuffer>;
3
+ export declare const hexToKeybytes: (hex: Uint8Array) => Uint8Array<ArrayBuffer>;
4
+ export declare const nibblesToCompactBytes: (nibbles: Uint8Array) => Uint8Array<ArrayBuffer>;
5
+ export declare const bytesToNibbles: (str: Uint8Array) => Uint8Array<ArrayBuffer>;
6
+ export declare const compactBytesToNibbles: (compact: Uint8Array) => Uint8Array<ArrayBufferLike>;
7
+ /**
8
+ * Converts each nibble into a single byte
9
+ *
10
+ * @param arr Nibble typed nibble array
11
+ * @returns Uint8Array typed byte array
12
+ */
13
+ export declare const nibbleTypeToByteType: (arr: Nibbles) => Uint8Array;
14
+ /**
15
+ * Turns each byte into a single nibble, only extracting the lower nibble of each byte
16
+ *
17
+ * @param key Uint8Array typed byte array
18
+ * @returns Nibble typed nibble array
19
+ */
20
+ export declare const byteTypeToNibbleType: (key: Uint8Array) => Nibbles;
21
+ /**
22
+ * Takes a string path and extends it by the given extension nibbles
23
+ *
24
+ * @param path String node path
25
+ * @param extension nibbles to extend by
26
+ * @param retType string indicating whether to return the key in "keybyte" or "hex" encoding
27
+ * @returns hex-encoded key
28
+ */
29
+ export declare const pathToHexKey: (path: string, extension: Nibbles, retType: string) => Uint8Array;
30
+ export declare const mergeAndFormatKeyPaths: (pathStrings: string[]) => Uint8Array<ArrayBuffer>[][];
31
+ //# sourceMappingURL=encoding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../../src/util/encoding.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAgC1C,eAAO,MAAM,cAAc,GAAI,SAAS,UAAU,4BAOjD,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,KAAK,UAAU,4BAS5C,CAAA;AAGD,eAAO,MAAM,qBAAqB,GAAI,SAAS,UAAU,4BAoBxD,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,KAAK,UAAU,4BAY7C,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,SAAS,UAAU,gCAaxD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,OAAO,KAAG,UAQnD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,UAAU,KAAG,OAStD,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,WAAW,OAAO,EAAE,SAAS,MAAM,KAAG,UAShF,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,aAAa,MAAM,EAAE,gCAgD3D,CAAA"}
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mergeAndFormatKeyPaths = exports.pathToHexKey = exports.byteTypeToNibbleType = exports.nibbleTypeToByteType = exports.compactBytesToNibbles = exports.bytesToNibbles = exports.nibblesToCompactBytes = exports.hexToKeybytes = exports.nibblesToBytes = void 0;
4
+ const util_1 = require("@feelyourprotocol/util");
5
+ const nibbles_ts_1 = require("./nibbles.js");
6
+ // Reference: https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/
7
+ //
8
+ // MerklePatriciaTrie keys are dealt with in three distinct encodings:
9
+ //
10
+ // KEYBYTES encoding contains the actual key and nothing else. This encoding is the
11
+ // input to most API functions.
12
+ //
13
+ // HEX encoding contains one byte for each nibble of the key and an optional trailing
14
+ // 'terminator' byte of value 0x10 which indicates whether or not the node at the key
15
+ // contains a value. Hex key encoding is used for nodes loaded in memory because it's
16
+ // convenient to access.
17
+ //
18
+ // COMPACT encoding is defined by the Ethereum Yellow Paper (it's called "hex prefix
19
+ // encoding" there) and contains the bytes of the key and a flag. The high nibble of the
20
+ // first byte contains the flag; the lowest bit encoding the oddness of the length and
21
+ // the second-lowest encoding whether the node at the key is a value node. The low nibble
22
+ // of the first byte is zero in the case of an even number of nibbles and the first nibble
23
+ // in the case of an odd number. All remaining nibbles (now an even number) fit properly
24
+ // into the remaining bytes. Compact encoding is used for nodes stored on disk.
25
+ /**
26
+ *
27
+ * @param nibbles byte sequence
28
+ * @returns boolean indicating if input hex nibble sequence has terminator indicating leaf-node
29
+ * terminator is represented with 16 because a nibble ranges from 0 - 15(f)
30
+ */
31
+ const hasTerminator = (nibbles) => {
32
+ return nibbles.length > 0 && nibbles[nibbles.length - 1] === 16;
33
+ };
34
+ const nibblesToBytes = (nibbles) => {
35
+ const bytes = new Uint8Array(nibbles.length / 2);
36
+ for (let bi = 0, ni = 0; ni < nibbles.length; bi += 1, ni += 2) {
37
+ bytes[bi] = (nibbles[ni] << 4) | nibbles[ni + 1];
38
+ }
39
+ return bytes;
40
+ };
41
+ exports.nibblesToBytes = nibblesToBytes;
42
+ const hexToKeybytes = (hex) => {
43
+ if (hasTerminator(hex)) {
44
+ hex = hex.subarray(0, hex.length - 1);
45
+ }
46
+ if (hex.length % 2 === 1) {
47
+ throw Error("Can't convert hex key of odd length");
48
+ }
49
+ return (0, exports.nibblesToBytes)(hex);
50
+ };
51
+ exports.hexToKeybytes = hexToKeybytes;
52
+ // hex to compact
53
+ const nibblesToCompactBytes = (nibbles) => {
54
+ let terminator = 0;
55
+ if (hasTerminator(nibbles)) {
56
+ terminator = 1;
57
+ // Remove the terminator from the sequence
58
+ nibbles = nibbles.subarray(0, nibbles.length - 1);
59
+ }
60
+ const buf = new Uint8Array(nibbles.length / 2 + 1);
61
+ // Shift the terminator info into the first nibble of buf[0]
62
+ buf[0] = terminator << 5;
63
+ // If odd length, then add that flag into the first nibble and put the odd nibble to
64
+ // second part of buf[0] which otherwise will be left padded with a 0
65
+ if ((nibbles.length & 1) === 1) {
66
+ buf[0] |= 1 << 4;
67
+ buf[0] |= nibbles[0];
68
+ nibbles = nibbles.subarray(1);
69
+ }
70
+ // create bytes out of the rest even nibbles
71
+ return (0, util_1.concatBytes)(buf.subarray(0, 1), (0, exports.nibblesToBytes)(nibbles));
72
+ };
73
+ exports.nibblesToCompactBytes = nibblesToCompactBytes;
74
+ const bytesToNibbles = (str) => {
75
+ const l = str.length * 2 + 1;
76
+ const nibbles = new Uint8Array(l);
77
+ for (let i = 0; i < str.length; i++) {
78
+ const b = str[i];
79
+ nibbles[i * 2] = b / 16;
80
+ nibbles[i * 2 + 1] = b % 16;
81
+ }
82
+ // This will get removed from calling function if the first nibble
83
+ // indicates that terminator is not present
84
+ nibbles[l - 1] = 16;
85
+ return nibbles;
86
+ };
87
+ exports.bytesToNibbles = bytesToNibbles;
88
+ const compactBytesToNibbles = (compact) => {
89
+ if (compact.length === 0) {
90
+ return compact;
91
+ }
92
+ let base = (0, exports.bytesToNibbles)(compact);
93
+ // delete terminator flag if terminator flag was not in first nibble
94
+ if (base[0] < 2) {
95
+ base = base.subarray(0, base.length - 1);
96
+ }
97
+ // chop the terminator nibble and the even padding (if there is one)
98
+ // i.e. chop 2 left nibbles when even else 1 when odd
99
+ const chop = 2 - (base[0] & 1);
100
+ return base.subarray(chop);
101
+ };
102
+ exports.compactBytesToNibbles = compactBytesToNibbles;
103
+ /**
104
+ * Converts each nibble into a single byte
105
+ *
106
+ * @param arr Nibble typed nibble array
107
+ * @returns Uint8Array typed byte array
108
+ */
109
+ const nibbleTypeToByteType = (arr) => {
110
+ const l = arr.length;
111
+ const buf = new Uint8Array(l);
112
+ for (let i = 0; i < buf.length; i++) {
113
+ buf[i] = arr[i];
114
+ }
115
+ return buf;
116
+ };
117
+ exports.nibbleTypeToByteType = nibbleTypeToByteType;
118
+ /**
119
+ * Turns each byte into a single nibble, only extracting the lower nibble of each byte
120
+ *
121
+ * @param key Uint8Array typed byte array
122
+ * @returns Nibble typed nibble array
123
+ */
124
+ const byteTypeToNibbleType = (key) => {
125
+ const nibbles = [];
126
+ for (let i = 0; i < key.length; i++) {
127
+ const q = i;
128
+ nibbles[q] = key[i] % 16;
129
+ }
130
+ return nibbles;
131
+ };
132
+ exports.byteTypeToNibbleType = byteTypeToNibbleType;
133
+ /**
134
+ * Takes a string path and extends it by the given extension nibbles
135
+ *
136
+ * @param path String node path
137
+ * @param extension nibbles to extend by
138
+ * @param retType string indicating whether to return the key in "keybyte" or "hex" encoding
139
+ * @returns hex-encoded key
140
+ */
141
+ const pathToHexKey = (path, extension, retType) => {
142
+ const b = (0, util_1.hexToBytes)(`0x${path}`);
143
+ const n = (0, exports.byteTypeToNibbleType)(b);
144
+ if (retType === 'hex') {
145
+ return (0, exports.nibbleTypeToByteType)(n.concat(extension));
146
+ }
147
+ else if (retType === 'keybyte') {
148
+ return (0, nibbles_ts_1.nibblesTypeToPackedBytes)(n.concat(extension));
149
+ }
150
+ throw Error('retType must be either "keybyte" or "hex"');
151
+ };
152
+ exports.pathToHexKey = pathToHexKey;
153
+ const mergeAndFormatKeyPaths = (pathStrings) => {
154
+ const ret = [];
155
+ let paths = [];
156
+ let i = 0;
157
+ while (i < pathStrings.length) {
158
+ const outerPathString = pathStrings[i].split('/');
159
+ const outerAccountPath = outerPathString[0];
160
+ const outerStoragePath = outerPathString[1];
161
+ paths.push(outerAccountPath);
162
+ if (outerStoragePath !== undefined) {
163
+ paths.push(outerStoragePath);
164
+ }
165
+ let j = ++i;
166
+ while (j < pathStrings.length) {
167
+ const innerPathString = pathStrings[j].split('/');
168
+ const innerAccountPath = innerPathString[0];
169
+ const innerStoragePath = innerPathString[1];
170
+ if (innerAccountPath === outerAccountPath) {
171
+ paths.push(innerStoragePath);
172
+ }
173
+ else {
174
+ ret.push(paths);
175
+ paths = [];
176
+ i = j;
177
+ break;
178
+ }
179
+ j++;
180
+ }
181
+ if (paths.length > 0) {
182
+ ret.push(paths);
183
+ paths = [];
184
+ }
185
+ }
186
+ if (paths.length > 0)
187
+ ret.push(paths);
188
+ return ret.map((pathStrings) => pathStrings.map((s) => {
189
+ if (s.length < 64) {
190
+ // partial path is compact encoded
191
+ return (0, exports.nibblesToCompactBytes)((0, util_1.unprefixedHexToBytes)(s));
192
+ }
193
+ else {
194
+ // full path is keybyte encoded
195
+ return (0, exports.hexToKeybytes)((0, util_1.unprefixedHexToBytes)(s));
196
+ }
197
+ }));
198
+ };
199
+ exports.mergeAndFormatKeyPaths = mergeAndFormatKeyPaths;
200
+ //# sourceMappingURL=encoding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../../src/util/encoding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { GenesisState } from '@feelyourprotocol/common';
2
+ /**
3
+ * Derives the stateRoot of the genesis block based on genesis allocations
4
+ */
5
+ export declare function genesisMPTStateRoot(genesisState: GenesisState): Promise<Uint8Array<ArrayBufferLike>>;
6
+ //# sourceMappingURL=genesisState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genesisState.d.ts","sourceRoot":"","sources":["../../../src/util/genesisState.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEpE;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,YAAY,wCAkCnE"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.genesisMPTStateRoot = genesisMPTStateRoot;
4
+ const rlp_1 = require("@feelyourprotocol/rlp");
5
+ const util_1 = require("@feelyourprotocol/util");
6
+ const sha3_js_1 = require("@noble/hashes/sha3.js");
7
+ const mpt_ts_1 = require("../mpt.js");
8
+ /**
9
+ * Derives the stateRoot of the genesis block based on genesis allocations
10
+ */
11
+ async function genesisMPTStateRoot(genesisState) {
12
+ const trie = new mpt_ts_1.MerklePatriciaTrie({ useKeyHashing: true });
13
+ for (const [key, value] of Object.entries(genesisState)) {
14
+ const address = (0, util_1.isHexString)(key) ? (0, util_1.hexToBytes)(key) : (0, util_1.unprefixedHexToBytes)(key);
15
+ const account = new util_1.Account();
16
+ if (typeof value === 'string') {
17
+ account.balance = BigInt(value);
18
+ }
19
+ else {
20
+ const [balance, code, storage, nonce] = value;
21
+ if (balance !== undefined) {
22
+ account.balance = BigInt(balance);
23
+ }
24
+ if (code !== undefined) {
25
+ const codeBytes = (0, util_1.isHexString)(code) ? (0, util_1.hexToBytes)(code) : (0, util_1.unprefixedHexToBytes)(code);
26
+ account.codeHash = (0, sha3_js_1.keccak_256)(codeBytes);
27
+ }
28
+ if (storage !== undefined) {
29
+ const storageTrie = new mpt_ts_1.MerklePatriciaTrie({ useKeyHashing: true });
30
+ for (const [k, val] of storage) {
31
+ const storageKey = (0, util_1.isHexString)(k) ? (0, util_1.hexToBytes)(k) : (0, util_1.unprefixedHexToBytes)(k);
32
+ const storageVal = rlp_1.RLP.encode((0, util_1.unpadBytes)((0, util_1.isHexString)(val) ? (0, util_1.hexToBytes)(val) : (0, util_1.unprefixedHexToBytes)(val)));
33
+ await storageTrie.put(storageKey, storageVal);
34
+ }
35
+ account.storageRoot = storageTrie.root();
36
+ }
37
+ if (nonce !== undefined) {
38
+ account.nonce = BigInt(nonce);
39
+ }
40
+ }
41
+ await trie.put(address, account.serialize());
42
+ }
43
+ return trie.root();
44
+ }
45
+ //# sourceMappingURL=genesisState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genesisState.js","sourceRoot":"","sources":["../../../src/util/genesisState.ts"],"names":[],"mappings":";;AAiBA,kDAkCC;AAnDD,yCAAqC;AACrC,2CAMyB;AACzB,mDAAkD;AAElD,sCAA8C;AAI9C;;GAEG;AACI,KAAK,UAAU,mBAAmB,CAAC,YAA0B;IAClE,MAAM,IAAI,GAAG,IAAI,2BAAkB,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,IAAA,kBAAW,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAU,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,2BAAoB,EAAC,GAAG,CAAC,CAAA;QAC9E,MAAM,OAAO,GAAG,IAAI,cAAO,EAAE,CAAA;QAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,KAA8B,CAAA;YACtE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;YACnC,CAAC;YACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,SAAS,GAAG,IAAA,kBAAW,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAU,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,2BAAoB,EAAC,IAAI,CAAC,CAAA;gBACnF,OAAO,CAAC,QAAQ,GAAG,IAAA,oBAAU,EAAC,SAAS,CAAC,CAAA;YAC1C,CAAC;YACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAG,IAAI,2BAAkB,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;gBACnE,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;oBAC/B,MAAM,UAAU,GAAG,IAAA,kBAAW,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAU,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,2BAAoB,EAAC,CAAC,CAAC,CAAA;oBAC3E,MAAM,UAAU,GAAG,SAAG,CAAC,MAAM,CAC3B,IAAA,iBAAU,EAAC,IAAA,kBAAW,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAU,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,2BAAoB,EAAC,GAAG,CAAC,CAAC,CAC3E,CAAA;oBACD,MAAM,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;gBAC/C,CAAC;gBACD,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,CAAA;YAC1C,CAAC;YACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;QACD,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAA;AACpB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Nibbles } from '../types.ts';
2
+ /**
3
+ * Prepends hex prefix to an array of nibbles.
4
+ * @param key - Array of nibbles
5
+ * @returns returns buffer of encoded data
6
+ **/
7
+ export declare function addHexPrefix(key: Nibbles, terminator: boolean): Nibbles;
8
+ /**
9
+ * Removes hex prefix of an array of nibbles.
10
+ * @param val - Array of nibbles
11
+ * @private
12
+ */
13
+ export declare function removeHexPrefix(val: Nibbles): Nibbles;
14
+ /**
15
+ * Returns true if hex-prefixed path is for a terminating (leaf) node.
16
+ * @param key - a hex-prefixed array of nibbles
17
+ * @private
18
+ */
19
+ export declare function isTerminator(key: Nibbles): boolean;
20
+ //# sourceMappingURL=hex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../../src/util/hex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C;;;;IAII;AACJ,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAevE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQrD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAElD"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addHexPrefix = addHexPrefix;
4
+ exports.removeHexPrefix = removeHexPrefix;
5
+ exports.isTerminator = isTerminator;
6
+ /**
7
+ * Prepends hex prefix to an array of nibbles.
8
+ * @param key - Array of nibbles
9
+ * @returns returns buffer of encoded data
10
+ **/
11
+ function addHexPrefix(key, terminator) {
12
+ // odd
13
+ if (key.length % 2) {
14
+ key.unshift(1);
15
+ }
16
+ else {
17
+ // even
18
+ key.unshift(0);
19
+ key.unshift(0);
20
+ }
21
+ if (terminator) {
22
+ key[0] += 2;
23
+ }
24
+ return key;
25
+ }
26
+ /**
27
+ * Removes hex prefix of an array of nibbles.
28
+ * @param val - Array of nibbles
29
+ * @private
30
+ */
31
+ function removeHexPrefix(val) {
32
+ if (val[0] % 2) {
33
+ val = val.slice(1);
34
+ }
35
+ else {
36
+ val = val.slice(2);
37
+ }
38
+ return val;
39
+ }
40
+ /**
41
+ * Returns true if hex-prefixed path is for a terminating (leaf) node.
42
+ * @param key - a hex-prefixed array of nibbles
43
+ * @private
44
+ */
45
+ function isTerminator(key) {
46
+ return key[0] > 1;
47
+ }
48
+ //# sourceMappingURL=hex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hex.js","sourceRoot":"","sources":["../../../src/util/hex.ts"],"names":[],"mappings":";;AAOA,oCAeC;AAOD,0CAQC;AAOD,oCAEC;AA5CD;;;;IAII;AACJ,SAAgB,YAAY,CAAC,GAAY,EAAE,UAAmB;IAC5D,MAAM;IACN,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAChB,CAAC;SAAM,CAAC;QACN,OAAO;QACP,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACd,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAChB,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACb,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,GAAY;IAC1C,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACf,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,GAAY;IACvC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AACnB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './encoding.ts';
2
+ export * from './genesisState.ts';
3
+ export * from './walkController.ts';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,20 @@
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("./encoding.js"), exports);
18
+ __exportStar(require("./genesisState.js"), exports);
19
+ __exportStar(require("./walkController.js"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/util/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA6B;AAC7B,oDAAiC;AACjC,sDAAmC"}
@@ -0,0 +1,30 @@
1
+ import type { Nibbles } from '../types.ts';
2
+ /**
3
+ * Converts a bytes to a nibble array.
4
+ * @private
5
+ * @param key
6
+ */
7
+ export declare function bytesToNibbles(key: Uint8Array): Nibbles;
8
+ /**
9
+ * Converts a nibble array into bytes.
10
+ * @private
11
+ * @param arr - Nibble array
12
+ */
13
+ export declare function nibblesTypeToPackedBytes(arr: Nibbles): Uint8Array;
14
+ /**
15
+ * Compare two nibble array.
16
+ * * `0` is returned if `n2` === `n1`.
17
+ * * `1` is returned if `n2` > `n1`.
18
+ * * `-1` is returned if `n2` < `n1`.
19
+ * @param n1 - Nibble array
20
+ * @param n2 - Nibble array
21
+ */
22
+ export declare function nibblesCompare(n1: Nibbles, n2: Nibbles): number;
23
+ /**
24
+ * Returns the number of in order matching nibbles of two give nibble arrays.
25
+ * @private
26
+ * @param nib1
27
+ * @param nib2
28
+ */
29
+ export declare function matchingNibbleLength(nib1: Nibbles, nib2: Nibbles): number;
30
+ //# sourceMappingURL=nibbles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nibbles.d.ts","sourceRoot":"","sources":["../../../src/util/nibbles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAWvD;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAOjE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,UAuBtD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAMzE"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bytesToNibbles = bytesToNibbles;
4
+ exports.nibblesTypeToPackedBytes = nibblesTypeToPackedBytes;
5
+ exports.nibblesCompare = nibblesCompare;
6
+ exports.matchingNibbleLength = matchingNibbleLength;
7
+ /**
8
+ * Converts a bytes to a nibble array.
9
+ * @private
10
+ * @param key
11
+ */
12
+ function bytesToNibbles(key) {
13
+ const nibbles = [];
14
+ for (let i = 0; i < key.length; i++) {
15
+ let q = i * 2;
16
+ nibbles[q] = key[i] >> 4;
17
+ ++q;
18
+ nibbles[q] = key[i] % 16;
19
+ }
20
+ return nibbles;
21
+ }
22
+ /**
23
+ * Converts a nibble array into bytes.
24
+ * @private
25
+ * @param arr - Nibble array
26
+ */
27
+ function nibblesTypeToPackedBytes(arr) {
28
+ const buf = new Uint8Array(arr.length / 2);
29
+ for (let i = 0; i < buf.length; i++) {
30
+ let q = i * 2;
31
+ buf[i] = (arr[q] << 4) + arr[++q];
32
+ }
33
+ return buf;
34
+ }
35
+ /**
36
+ * Compare two nibble array.
37
+ * * `0` is returned if `n2` === `n1`.
38
+ * * `1` is returned if `n2` > `n1`.
39
+ * * `-1` is returned if `n2` < `n1`.
40
+ * @param n1 - Nibble array
41
+ * @param n2 - Nibble array
42
+ */
43
+ function nibblesCompare(n1, n2) {
44
+ const cmpLength = Math.min(n1.length, n2.length);
45
+ let res = 0;
46
+ for (let i = 0; i < cmpLength; i++) {
47
+ if (n1[i] < n2[i]) {
48
+ res = -1;
49
+ break;
50
+ }
51
+ else if (n1[i] > n2[i]) {
52
+ res = 1;
53
+ break;
54
+ }
55
+ }
56
+ if (res === 0) {
57
+ if (n1.length < n2.length) {
58
+ res = -1;
59
+ }
60
+ else if (n1.length > n2.length) {
61
+ res = 1;
62
+ }
63
+ }
64
+ return res;
65
+ }
66
+ /**
67
+ * Returns the number of in order matching nibbles of two give nibble arrays.
68
+ * @private
69
+ * @param nib1
70
+ * @param nib2
71
+ */
72
+ function matchingNibbleLength(nib1, nib2) {
73
+ let i = 0;
74
+ while (nib1[i] === nib2[i] && nib1.length > i) {
75
+ i++;
76
+ }
77
+ return i;
78
+ }
79
+ //# sourceMappingURL=nibbles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nibbles.js","sourceRoot":"","sources":["../../../src/util/nibbles.ts"],"names":[],"mappings":";;AAOA,wCAWC;AAOD,4DAOC;AAUD,wCAuBC;AAQD,oDAMC;AA7ED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,GAAe;IAC5C,MAAM,OAAO,GAAG,EAAa,CAAA;IAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACb,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACxB,EAAE,CAAC,CAAA;QACH,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;IAC1B,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAgB,wBAAwB,CAAC,GAAY;IACnD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACb,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACnC,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,EAAW,EAAE,EAAW;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAA;IAEhD,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,GAAG,GAAG,CAAC,CAAC,CAAA;YACR,MAAK;QACP,CAAC;aAAM,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,GAAG,GAAG,CAAC,CAAA;YACP,MAAK;QACP,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;YAC1B,GAAG,GAAG,CAAC,CAAC,CAAA;QACV,CAAC;aAAM,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;YACjC,GAAG,GAAG,CAAC,CAAA;QACT,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB,CAAC,IAAa,EAAE,IAAa;IAC/D,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,CAAC,EAAE,CAAA;IACL,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC"}