@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,456 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.verifyMerkleRangeProof = verifyMerkleRangeProof;
4
+ const util_1 = require("@feelyourprotocol/util");
5
+ const sha3_js_1 = require("@noble/hashes/sha3.js");
6
+ const index_ts_1 = require("../index.js");
7
+ const mpt_ts_1 = require("../mpt.js");
8
+ const index_ts_2 = require("../node/index.js");
9
+ const nibbles_ts_1 = require("../util/nibbles.js");
10
+ // reference: https://github.com/ethereum/go-ethereum/blob/20356e57b119b4e70ce47665a71964434e15200d/trie/proof.go
11
+ /**
12
+ * unset will remove all nodes to the left or right of the target key(decided by `removeLeft`).
13
+ * @param trie - trie object.
14
+ * @param parent - parent node, it can be `null`.
15
+ * @param child - child node.
16
+ * @param key - target nibbles.
17
+ * @param pos - key position.
18
+ * @param removeLeft - remove all nodes to the left or right of the target key.
19
+ * @param stack - a stack of modified nodes.
20
+ * @returns The end position of key.
21
+ */
22
+ async function unset(trie, parent, child, key, pos, removeLeft, stack) {
23
+ if (child instanceof index_ts_2.BranchMPTNode) {
24
+ /**
25
+ * This node is a branch node,
26
+ * remove all branches on the left or right
27
+ */
28
+ if (removeLeft) {
29
+ for (let i = 0; i < key[pos]; i++) {
30
+ child.setBranch(i, null);
31
+ }
32
+ }
33
+ else {
34
+ for (let i = key[pos] + 1; i < 16; i++) {
35
+ child.setBranch(i, null);
36
+ }
37
+ }
38
+ // record this node on the stack
39
+ stack.push(child);
40
+ // continue to the next node
41
+ const next = child.getBranch(key[pos]);
42
+ const _child = next && (await trie.lookupNode(next));
43
+ return unset(trie, child, _child, key, pos + 1, removeLeft, stack);
44
+ }
45
+ else if (child instanceof index_ts_2.ExtensionMPTNode || child instanceof index_ts_2.LeafMPTNode) {
46
+ /**
47
+ * This node is an extension node or lead node,
48
+ * if node._nibbles is less or greater than the target key,
49
+ * remove self from parent
50
+ */
51
+ if (key.length - pos < child.keyLength() ||
52
+ (0, nibbles_ts_1.nibblesCompare)(child._nibbles, key.slice(pos, pos + child.keyLength())) !== 0) {
53
+ if (removeLeft) {
54
+ if ((0, nibbles_ts_1.nibblesCompare)(child._nibbles, key.slice(pos)) < 0) {
55
+ ;
56
+ parent.setBranch(key[pos - 1], null);
57
+ }
58
+ }
59
+ else {
60
+ if ((0, nibbles_ts_1.nibblesCompare)(child._nibbles, key.slice(pos)) > 0) {
61
+ ;
62
+ parent.setBranch(key[pos - 1], null);
63
+ }
64
+ }
65
+ return pos - 1;
66
+ }
67
+ if (child instanceof index_ts_2.LeafMPTNode) {
68
+ // This node is a leaf node, directly remove it from parent
69
+ ;
70
+ parent.setBranch(key[pos - 1], null);
71
+ return pos - 1;
72
+ }
73
+ else {
74
+ const _child = await trie.lookupNode(child.value());
75
+ if (_child instanceof index_ts_2.LeafMPTNode) {
76
+ // The child of this node is leaf node, remove it from parent too
77
+ ;
78
+ parent.setBranch(key[pos - 1], null);
79
+ return pos - 1;
80
+ }
81
+ // record this node on the stack
82
+ stack.push(child);
83
+ // continue to the next node
84
+ return unset(trie, child, _child, key, pos + child.keyLength(), removeLeft, stack);
85
+ }
86
+ }
87
+ else if (child === null) {
88
+ return pos - 1;
89
+ }
90
+ else {
91
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid node');
92
+ }
93
+ }
94
+ /**
95
+ * unsetInternal will remove all nodes between `left` and `right` (including `left` and `right`)
96
+ * @param trie - trie object.
97
+ * @param left - left nibbles.
98
+ * @param right - right nibbles.
99
+ * @returns Is it an empty trie.
100
+ */
101
+ async function unsetInternal(trie, left, right) {
102
+ // Key position
103
+ let pos = 0;
104
+ // Parent node
105
+ let parent = null;
106
+ // Current node
107
+ let node = await trie.lookupNode(trie.root());
108
+ let shortForkLeft;
109
+ let shortForkRight;
110
+ // A stack of modified nodes.
111
+ const stack = [];
112
+ // 1. Find the fork point of `left` and `right`
113
+ while (true) {
114
+ if (node instanceof index_ts_2.ExtensionMPTNode || node instanceof index_ts_2.LeafMPTNode) {
115
+ // record this node on the stack
116
+ stack.push(node);
117
+ if (left.length - pos < node.keyLength()) {
118
+ shortForkLeft = (0, nibbles_ts_1.nibblesCompare)(left.slice(pos), node._nibbles);
119
+ }
120
+ else {
121
+ shortForkLeft = (0, nibbles_ts_1.nibblesCompare)(left.slice(pos, pos + node.keyLength()), node._nibbles);
122
+ }
123
+ if (right.length - pos < node.keyLength()) {
124
+ shortForkRight = (0, nibbles_ts_1.nibblesCompare)(right.slice(pos), node._nibbles);
125
+ }
126
+ else {
127
+ shortForkRight = (0, nibbles_ts_1.nibblesCompare)(right.slice(pos, pos + node.keyLength()), node._nibbles);
128
+ }
129
+ // If one of `left` and `right` is not equal to node._nibbles, it means we found the fork point
130
+ if (shortForkLeft !== 0 || shortForkRight !== 0) {
131
+ break;
132
+ }
133
+ if (node instanceof index_ts_2.LeafMPTNode) {
134
+ // it shouldn't happen
135
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid node');
136
+ }
137
+ // continue to the next node
138
+ parent = node;
139
+ pos += node.keyLength();
140
+ node = await trie.lookupNode(node.value());
141
+ }
142
+ else if (node instanceof index_ts_2.BranchMPTNode) {
143
+ // record this node on the stack
144
+ stack.push(node);
145
+ const leftNode = node.getBranch(left[pos]);
146
+ const rightNode = node.getBranch(right[pos]);
147
+ // One of `left` and `right` is `null`, stop searching
148
+ if (leftNode === null || rightNode === null) {
149
+ break;
150
+ }
151
+ // Stop searching if `left` and `right` are not equal
152
+ if (!(leftNode instanceof Uint8Array)) {
153
+ if (rightNode instanceof Uint8Array) {
154
+ break;
155
+ }
156
+ if (leftNode.length !== rightNode.length) {
157
+ break;
158
+ }
159
+ let abort = false;
160
+ for (let i = 0; i < leftNode.length; i++) {
161
+ if (!(0, util_1.equalsBytes)(leftNode[i], rightNode[i])) {
162
+ abort = true;
163
+ break;
164
+ }
165
+ }
166
+ if (abort) {
167
+ break;
168
+ }
169
+ }
170
+ else {
171
+ if (!(rightNode instanceof Uint8Array)) {
172
+ break;
173
+ }
174
+ if (!(0, util_1.equalsBytes)(leftNode, rightNode)) {
175
+ break;
176
+ }
177
+ }
178
+ // continue to the next node
179
+ parent = node;
180
+ node = await trie.lookupNode(leftNode);
181
+ pos += 1;
182
+ }
183
+ else {
184
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid node');
185
+ }
186
+ }
187
+ // 2. Starting from the fork point, delete all nodes between `left` and `right`
188
+ const saveStack = (key, stack) => {
189
+ return trie.saveStack(key, stack, []);
190
+ };
191
+ if (node instanceof index_ts_2.ExtensionMPTNode || node instanceof index_ts_2.LeafMPTNode) {
192
+ /**
193
+ * There can have these five scenarios:
194
+ * - both proofs are less than the trie path => no valid range
195
+ * - both proofs are greater than the trie path => no valid range
196
+ * - left proof is less and right proof is greater => valid range, unset the entire trie
197
+ * - left proof points to the trie node, but right proof is greater => valid range, unset left node
198
+ * - right proof points to the trie node, but left proof is less => valid range, unset right node
199
+ */
200
+ const removeSelfFromParentAndSaveStack = async (key) => {
201
+ if (parent === null) {
202
+ return true;
203
+ }
204
+ stack.pop();
205
+ parent.setBranch(key[pos - 1], null);
206
+ await saveStack(key.slice(0, pos - 1), stack);
207
+ return false;
208
+ };
209
+ if (shortForkLeft === -1 && shortForkRight === -1) {
210
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid range');
211
+ }
212
+ if (shortForkLeft === 1 && shortForkRight === 1) {
213
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid range');
214
+ }
215
+ if (shortForkLeft !== 0 && shortForkRight !== 0) {
216
+ // Unset the entire trie
217
+ return removeSelfFromParentAndSaveStack(left);
218
+ }
219
+ // Unset left node
220
+ if (shortForkRight !== 0) {
221
+ if (node instanceof index_ts_2.LeafMPTNode) {
222
+ return removeSelfFromParentAndSaveStack(left);
223
+ }
224
+ const child = await trie.lookupNode(node._value);
225
+ if (child instanceof index_ts_2.LeafMPTNode) {
226
+ return removeSelfFromParentAndSaveStack(left);
227
+ }
228
+ const endPos = await unset(trie, node, child, left.slice(pos), node.keyLength(), false, stack);
229
+ await saveStack(left.slice(0, pos + endPos), stack);
230
+ return false;
231
+ }
232
+ // Unset right node
233
+ if (shortForkLeft !== 0) {
234
+ if (node instanceof index_ts_2.LeafMPTNode) {
235
+ return removeSelfFromParentAndSaveStack(right);
236
+ }
237
+ const child = await trie.lookupNode(node._value);
238
+ if (child instanceof index_ts_2.LeafMPTNode) {
239
+ return removeSelfFromParentAndSaveStack(right);
240
+ }
241
+ const endPos = await unset(trie, node, child, right.slice(pos), node.keyLength(), true, stack);
242
+ await saveStack(right.slice(0, pos + endPos), stack);
243
+ return false;
244
+ }
245
+ return false;
246
+ }
247
+ else if (node instanceof index_ts_2.BranchMPTNode) {
248
+ // Unset all internal nodes in the forkPoint
249
+ for (let i = left[pos] + 1; i < right[pos]; i++) {
250
+ node.setBranch(i, null);
251
+ }
252
+ {
253
+ /**
254
+ * `stack` records the path from root to fork point.
255
+ * Since we need to unset both left and right nodes once,
256
+ * we need to make a copy here.
257
+ */
258
+ const _stack = [...stack];
259
+ const next = node.getBranch(left[pos]);
260
+ const child = next && (await trie.lookupNode(next));
261
+ const endPos = await unset(trie, node, child, left.slice(pos), 1, false, _stack);
262
+ await saveStack(left.slice(0, pos + endPos), _stack);
263
+ }
264
+ {
265
+ const _stack = [...stack];
266
+ const next = node.getBranch(right[pos]);
267
+ const child = next && (await trie.lookupNode(next));
268
+ const endPos = await unset(trie, node, child, right.slice(pos), 1, true, _stack);
269
+ await saveStack(right.slice(0, pos + endPos), _stack);
270
+ }
271
+ return false;
272
+ }
273
+ else {
274
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid node');
275
+ }
276
+ }
277
+ /**
278
+ * Verifies a proof and return the verified trie.
279
+ * @param rootHash - root hash.
280
+ * @param key - target key.
281
+ * @param proof - proof node list.
282
+ * @throws If proof is found to be invalid.
283
+ * @returns The value from the key, or null if valid proof of non-existence.
284
+ */
285
+ async function verifyMPTWithMerkleProof(rootHash, key, proof, useKeyHashingFunction) {
286
+ const proofTrie = await (0, index_ts_1.createMPTFromProof)(proof, {
287
+ root: rootHash,
288
+ useKeyHashingFunction,
289
+ });
290
+ try {
291
+ const value = await proofTrie.get(key, true);
292
+ return {
293
+ trie: proofTrie,
294
+ value,
295
+ };
296
+ }
297
+ catch (err) {
298
+ if (err.message === 'Missing node in DB') {
299
+ throw (0, util_1.EthereumJSErrorWithoutCode)('Invalid proof provided');
300
+ }
301
+ else {
302
+ throw err;
303
+ }
304
+ }
305
+ }
306
+ /**
307
+ * hasRightElement returns the indicator whether there exists more elements
308
+ * on the right side of the given path
309
+ * @param trie - trie object.
310
+ * @param key - given path.
311
+ */
312
+ async function hasRightElement(trie, key) {
313
+ let pos = 0;
314
+ let node = await trie.lookupNode(trie.root());
315
+ while (node !== null) {
316
+ if (node instanceof index_ts_2.BranchMPTNode) {
317
+ for (let i = key[pos] + 1; i < 16; i++) {
318
+ if (node.getBranch(i) !== null) {
319
+ return true;
320
+ }
321
+ }
322
+ const next = node.getBranch(key[pos]);
323
+ node = next && (await trie.lookupNode(next));
324
+ pos += 1;
325
+ }
326
+ else if (node instanceof index_ts_2.ExtensionMPTNode) {
327
+ if (key.length - pos < node.keyLength() ||
328
+ (0, nibbles_ts_1.nibblesCompare)(node._nibbles, key.slice(pos, pos + node.keyLength())) !== 0) {
329
+ return (0, nibbles_ts_1.nibblesCompare)(node._nibbles, key.slice(pos)) > 0;
330
+ }
331
+ pos += node.keyLength();
332
+ node = await trie.lookupNode(node._value);
333
+ }
334
+ else if (node instanceof index_ts_2.LeafMPTNode) {
335
+ return false;
336
+ }
337
+ else {
338
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid node');
339
+ }
340
+ }
341
+ return false;
342
+ }
343
+ /**
344
+ * Checks whether the given leaf nodes and edge proof can prove the given trie leaves range is matched with the specific root.
345
+ *
346
+ * A range proof is a proof that includes the encoded trie nodes from the root node to leaf node for one or more branches of a trie,
347
+ * allowing an entire range of leaf nodes to be validated. This is useful in applications such as snap sync where contiguous ranges
348
+ * of state trie data is received and validated for constructing world state, locally.
349
+ *
350
+ * There are four situations:
351
+ *
352
+ * - All elements proof. In this case the proof can be null, but the range should
353
+ * be all the leaves in the trie.
354
+ *
355
+ * - One element proof. In this case no matter the edge proof is a non-existent
356
+ * proof or not, we can always verify the correctness of the proof.
357
+ *
358
+ * - Zero element proof. In this case a single non-existent proof is enough to prove.
359
+ * Besides, if there are still some other leaves available on the right side, then
360
+ * an error will be returned.
361
+ *
362
+ * - Two edge elements proof. In this case two existent or non-existent proof(first and last) should be provided.
363
+ *
364
+ * NOTE: Currently only supports verification when the length of firstKey and lastKey are the same.
365
+ *
366
+ * @param rootHash - root hash of state trie this proof is being verified against.
367
+ * @param firstKey - first key of range being proven.
368
+ * @param lastKey - last key of range being proven.
369
+ * @param keys - key list of leaf data being proven.
370
+ * @param values - value list of leaf data being proven, one-to-one correspondence with keys.
371
+ * @param proof - proof node list, if all-elements-proof where no proof is needed, proof should be null, and both `firstKey` and `lastKey` must be null as well
372
+ * @param opts - optional, the opts may include a custom hashing function to use with the trie for proof verification
373
+ * @returns a flag to indicate whether there exists more trie node in the trie
374
+ */
375
+ async function verifyMerkleRangeProof(rootHash, firstKeyRaw, lastKeyRaw, keysRaw, values, proof, useKeyHashingFunction = sha3_js_1.keccak_256) {
376
+ // Convert Uint8Array keys to nibbles
377
+ const firstKey = firstKeyRaw !== null ? (0, nibbles_ts_1.bytesToNibbles)(firstKeyRaw) : null;
378
+ const lastKey = lastKeyRaw !== null ? (0, nibbles_ts_1.bytesToNibbles)(lastKeyRaw) : null;
379
+ const keys = keysRaw.map(nibbles_ts_1.bytesToNibbles);
380
+ if (keys.length !== values.length) {
381
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid keys length or values length');
382
+ }
383
+ // Make sure the keys are in order
384
+ for (let i = 0; i < keys.length - 1; i++) {
385
+ if ((0, nibbles_ts_1.nibblesCompare)(keys[i], keys[i + 1]) >= 0) {
386
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid keys order');
387
+ }
388
+ }
389
+ // Make sure all values are present
390
+ for (const value of values) {
391
+ if (value.length === 0) {
392
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid values');
393
+ }
394
+ }
395
+ // All elements proof
396
+ if (proof === null && firstKey === null && lastKey === null) {
397
+ const trie = new mpt_ts_1.MerklePatriciaTrie({ useKeyHashingFunction });
398
+ for (let i = 0; i < keys.length; i++) {
399
+ await trie.put((0, nibbles_ts_1.nibblesTypeToPackedBytes)(keys[i]), values[i]);
400
+ }
401
+ if (!(0, util_1.equalsBytes)(rootHash, trie.root())) {
402
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid all elements proof: root mismatch');
403
+ }
404
+ return false;
405
+ }
406
+ if (proof !== null && firstKey !== null && lastKey === null) {
407
+ // Zero element proof
408
+ if (keys.length === 0) {
409
+ const { trie, value } = await verifyMPTWithMerkleProof(rootHash, (0, nibbles_ts_1.nibblesTypeToPackedBytes)(firstKey), proof, useKeyHashingFunction);
410
+ if (value !== null || (await hasRightElement(trie, firstKey))) {
411
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid zero element proof: value mismatch');
412
+ }
413
+ return false;
414
+ }
415
+ }
416
+ if (proof === null || firstKey === null || lastKey === null) {
417
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid all elements proof: proof, firstKey, lastKey must be null at the same time');
418
+ }
419
+ // One element proof
420
+ if (keys.length === 1 && (0, nibbles_ts_1.nibblesCompare)(firstKey, lastKey) === 0) {
421
+ const { trie, value } = await verifyMPTWithMerkleProof(rootHash, (0, nibbles_ts_1.nibblesTypeToPackedBytes)(firstKey), proof, useKeyHashingFunction);
422
+ if ((0, nibbles_ts_1.nibblesCompare)(firstKey, keys[0]) !== 0) {
423
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid one element proof: firstKey should be equal to keys[0]');
424
+ }
425
+ if (value === null || !(0, util_1.equalsBytes)(value, values[0])) {
426
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid one element proof: value mismatch');
427
+ }
428
+ return hasRightElement(trie, firstKey);
429
+ }
430
+ // Two edge elements proof
431
+ if ((0, nibbles_ts_1.nibblesCompare)(firstKey, lastKey) >= 0) {
432
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid two edge elements proof: firstKey should be less than lastKey');
433
+ }
434
+ if (firstKey.length !== lastKey.length) {
435
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid two edge elements proof: the length of firstKey should be equal to the length of lastKey');
436
+ }
437
+ const trie = await (0, index_ts_1.createMPTFromProof)(proof, {
438
+ useKeyHashingFunction,
439
+ root: rootHash,
440
+ });
441
+ // Remove all nodes between two edge proofs
442
+ const empty = await unsetInternal(trie, firstKey, lastKey);
443
+ if (empty) {
444
+ trie.root(trie.EMPTY_TRIE_ROOT);
445
+ }
446
+ // Put all elements to the trie
447
+ for (let i = 0; i < keys.length; i++) {
448
+ await trie.put((0, nibbles_ts_1.nibblesTypeToPackedBytes)(keys[i]), values[i]);
449
+ }
450
+ // Compare rootHash
451
+ if (!(0, util_1.equalsBytes)(trie.root(), rootHash)) {
452
+ throw (0, util_1.EthereumJSErrorWithoutCode)('invalid two edge elements proof: root mismatch');
453
+ }
454
+ return hasRightElement(trie, keys[keys.length - 1]);
455
+ }
456
+ //# sourceMappingURL=range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.js","sourceRoot":"","sources":["../../../src/proof/range.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import type { DB, ValueEncoding } from '@feelyourprotocol/util';
2
+ import type { BranchMPTNode, ExtensionMPTNode, LeafMPTNode } from './node/index.ts';
3
+ import type { WalkController } from './util/walkController.ts';
4
+ export type MPTNode = BranchMPTNode | ExtensionMPTNode | LeafMPTNode;
5
+ export type Nibbles = number[];
6
+ export type RawExtensionMPTNode = [Uint8Array, Uint8Array];
7
+ export type RawLeafMPTNode = [Uint8Array, Uint8Array];
8
+ export type NodeReferenceOrRawMPTNode = Uint8Array | RawExtensionMPTNode | RawLeafMPTNode;
9
+ export type BranchMPTNodeBranchValue = NodeReferenceOrRawMPTNode | null;
10
+ export type Proof = Uint8Array[];
11
+ export interface CommonInterface {
12
+ customCrypto: {
13
+ keccak256?: (msg: Uint8Array) => Uint8Array;
14
+ };
15
+ }
16
+ export interface Path {
17
+ node: MPTNode | null;
18
+ remaining: Nibbles;
19
+ stack: MPTNode[];
20
+ }
21
+ export type FoundNodeFunction = (nodeRef: NodeReferenceOrRawMPTNode, node: MPTNode | null, key: Nibbles, walkController: WalkController) => void;
22
+ export type HashKeysFunction = (msg: Uint8Array) => Uint8Array;
23
+ export interface MPTOpts {
24
+ /**
25
+ * A database instance.
26
+ */
27
+ db?: DB<string, string | Uint8Array>;
28
+ /**
29
+ * A `Uint8Array` for the root of a previously stored trie
30
+ */
31
+ root?: Uint8Array;
32
+ /**
33
+ * Create as a secure MerklePatriciaTrie where the keys are automatically hashed using the
34
+ * **keccak_256** hash function or alternatively the custom hash function provided.
35
+ * Default: `false`
36
+ *
37
+ * This is the flavor of the MerklePatriciaTrie which is used in production Ethereum networks
38
+ * like Ethereum Mainnet.
39
+ *
40
+ * Note: This functionality has been refactored along the v5 release and was before
41
+ * provided as a separate inherited class `SecureTrie`. Just replace with `Trie`
42
+ * instantiation with `useKeyHashing` set to `true`.
43
+ */
44
+ useKeyHashing?: boolean;
45
+ /**
46
+ * Hash function used for hashing trie node and securing key.
47
+ */
48
+ useKeyHashingFunction?: HashKeysFunction;
49
+ /**
50
+ * Add a prefix to the trie node keys
51
+ *
52
+ * (potential performance benefits if multiple tries are stored within the same DB,
53
+ * e.g. all storage tries being stored in the outer account state DB)
54
+ */
55
+ keyPrefix?: Uint8Array;
56
+ /**
57
+ * ValueEncoding of the database (the values which are `put`/`get` in the db are of this type). Defaults to `string`
58
+ */
59
+ valueEncoding?: ValueEncoding;
60
+ /**
61
+ * Store the root inside the database after every `write` operation
62
+ */
63
+ useRootPersistence?: boolean;
64
+ /**
65
+ * Flag to prune the trie. When set to `true`, each time a value is overridden,
66
+ * unreachable nodes will be pruned (deleted) from the trie
67
+ */
68
+ useNodePruning?: boolean;
69
+ /**
70
+ * LRU cache for trie nodes to allow for faster node retrieval.
71
+ *
72
+ * Default: 0 (deactivated)
73
+ */
74
+ cacheSize?: number;
75
+ /**
76
+ * @feelyourprotocol/common `Common` instance (an alternative to passing in a `customHashingFunction`)
77
+ */
78
+ common?: CommonInterface;
79
+ }
80
+ export type MPTOptsWithDefaults = MPTOpts & {
81
+ useKeyHashing: boolean;
82
+ useKeyHashingFunction: HashKeysFunction;
83
+ useRootPersistence: boolean;
84
+ useNodePruning: boolean;
85
+ cacheSize: number;
86
+ };
87
+ export interface TrieShallowCopyOpts {
88
+ keyPrefix?: Uint8Array;
89
+ cacheSize?: number;
90
+ }
91
+ export interface CheckpointDBOpts {
92
+ /**
93
+ * A database instance.
94
+ */
95
+ db: DB<string, string | Uint8Array>;
96
+ /**
97
+ * ValueEncoding of the database (the values which are `put`/`get` in the db are of this type). Defaults to `string`
98
+ */
99
+ valueEncoding?: ValueEncoding;
100
+ /**
101
+ * Cache size (default: 0)
102
+ */
103
+ cacheSize?: number;
104
+ }
105
+ export type Checkpoint = {
106
+ keyValueMap: Map<string, Uint8Array | undefined>;
107
+ root: Uint8Array;
108
+ };
109
+ export declare const ROOT_DB_KEY: Uint8Array<ArrayBufferLike>;
110
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ROOT_DB_KEY = void 0;
4
+ const util_1 = require("@feelyourprotocol/util");
5
+ exports.ROOT_DB_KEY = (0, util_1.utf8ToBytes)('__root__');
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAAA,2CAA8C;AAsJjC,QAAA,WAAW,GAAG,IAAA,kBAAW,EAAC,UAAU,CAAC,CAAA"}
@@ -0,0 +1,20 @@
1
+ import type { MerklePatriciaTrie } from '../mpt.ts';
2
+ import type { MPTNode } from '../types.ts';
3
+ export type NodeFilter = (node: MPTNode, key: number[]) => Promise<boolean>;
4
+ export type OnFound = (node: MPTNode, key: number[]) => Promise<any>;
5
+ /**
6
+ * Walk MerklePatriciaTrie via async generator
7
+ * @param nodeHash - The root key to walk on.
8
+ * @param currentKey - The current (partial) key.
9
+ * @param onFound - Called on every node found (before filter)
10
+ * @param filter - Filter nodes yielded by the generator.
11
+ * @param visited - Set of visited nodes
12
+ * @returns AsyncIterable<{ node: MPTNode; currentKey: number[] }>
13
+ * Iterate through nodes with
14
+ * `for await (const { node, currentKey } of trie._walkTrie(root)) { ... }`
15
+ */
16
+ export declare function _walkTrie(this: MerklePatriciaTrie, nodeHash: Uint8Array, currentKey?: number[], onFound?: OnFound, filter?: NodeFilter, visited?: Set<string>): AsyncIterable<{
17
+ node: MPTNode;
18
+ currentKey: number[];
19
+ }>;
20
+ //# sourceMappingURL=asyncWalk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncWalk.d.ts","sourceRoot":"","sources":["../../../src/util/asyncWalk.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAC3E,MAAM,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;AAEpE;;;;;;;;;;GAUG;AACH,wBAAuB,SAAS,CAC9B,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,UAAU,EACpB,UAAU,GAAE,MAAM,EAAO,EACzB,OAAO,GAAE,OAA0D,EACnE,MAAM,GAAE,UAA+D,EACvE,OAAO,GAAE,GAAG,CAAC,MAAM,CAAqB,GACvC,aAAa,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA6BxD"}