@feelyourprotocol/util 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 (223) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +297 -0
  3. package/dist/cjs/account.d.ts +165 -0
  4. package/dist/cjs/account.d.ts.map +1 -0
  5. package/dist/cjs/account.js +530 -0
  6. package/dist/cjs/account.js.map +1 -0
  7. package/dist/cjs/address.d.ts +67 -0
  8. package/dist/cjs/address.d.ts.map +1 -0
  9. package/dist/cjs/address.js +136 -0
  10. package/dist/cjs/address.js.map +1 -0
  11. package/dist/cjs/authorization.d.ts +41 -0
  12. package/dist/cjs/authorization.d.ts.map +1 -0
  13. package/dist/cjs/authorization.js +135 -0
  14. package/dist/cjs/authorization.js.map +1 -0
  15. package/dist/cjs/bal.d.ts +129 -0
  16. package/dist/cjs/bal.d.ts.map +1 -0
  17. package/dist/cjs/bal.js +529 -0
  18. package/dist/cjs/bal.js.map +1 -0
  19. package/dist/cjs/binaryTree.d.ts +148 -0
  20. package/dist/cjs/binaryTree.d.ts.map +1 -0
  21. package/dist/cjs/binaryTree.js +240 -0
  22. package/dist/cjs/binaryTree.js.map +1 -0
  23. package/dist/cjs/blobs.d.ts +76 -0
  24. package/dist/cjs/blobs.d.ts.map +1 -0
  25. package/dist/cjs/blobs.js +175 -0
  26. package/dist/cjs/blobs.js.map +1 -0
  27. package/dist/cjs/bytes.d.ts +291 -0
  28. package/dist/cjs/bytes.d.ts.map +1 -0
  29. package/dist/cjs/bytes.js +606 -0
  30. package/dist/cjs/bytes.js.map +1 -0
  31. package/dist/cjs/constants.d.ts +91 -0
  32. package/dist/cjs/constants.d.ts.map +1 -0
  33. package/dist/cjs/constants.js +97 -0
  34. package/dist/cjs/constants.js.map +1 -0
  35. package/dist/cjs/db.d.ts +65 -0
  36. package/dist/cjs/db.d.ts.map +1 -0
  37. package/dist/cjs/db.js +14 -0
  38. package/dist/cjs/db.js.map +1 -0
  39. package/dist/cjs/env.d.ts +9 -0
  40. package/dist/cjs/env.d.ts.map +1 -0
  41. package/dist/cjs/env.js +13 -0
  42. package/dist/cjs/env.js.map +1 -0
  43. package/dist/cjs/errors.d.ts +3 -0
  44. package/dist/cjs/errors.d.ts.map +1 -0
  45. package/dist/cjs/errors.js +19 -0
  46. package/dist/cjs/errors.js.map +1 -0
  47. package/dist/cjs/helpers.d.ts +21 -0
  48. package/dist/cjs/helpers.d.ts.map +1 -0
  49. package/dist/cjs/helpers.js +50 -0
  50. package/dist/cjs/helpers.js.map +1 -0
  51. package/dist/cjs/index.d.ts +67 -0
  52. package/dist/cjs/index.d.ts.map +1 -0
  53. package/dist/cjs/index.js +93 -0
  54. package/dist/cjs/index.js.map +1 -0
  55. package/dist/cjs/internal.d.ts +72 -0
  56. package/dist/cjs/internal.d.ts.map +1 -0
  57. package/dist/cjs/internal.js +182 -0
  58. package/dist/cjs/internal.js.map +1 -0
  59. package/dist/cjs/kzg.d.ts +14 -0
  60. package/dist/cjs/kzg.d.ts.map +1 -0
  61. package/dist/cjs/kzg.js +3 -0
  62. package/dist/cjs/kzg.js.map +1 -0
  63. package/dist/cjs/lock.d.ts +15 -0
  64. package/dist/cjs/lock.d.ts.map +1 -0
  65. package/dist/cjs/lock.js +45 -0
  66. package/dist/cjs/lock.js.map +1 -0
  67. package/dist/cjs/mapDB.d.ts +17 -0
  68. package/dist/cjs/mapDB.d.ts.map +1 -0
  69. package/dist/cjs/mapDB.js +46 -0
  70. package/dist/cjs/mapDB.js.map +1 -0
  71. package/dist/cjs/package.json +3 -0
  72. package/dist/cjs/provider.d.ts +46 -0
  73. package/dist/cjs/provider.d.ts.map +1 -0
  74. package/dist/cjs/provider.js +84 -0
  75. package/dist/cjs/provider.js.map +1 -0
  76. package/dist/cjs/request.d.ts +20 -0
  77. package/dist/cjs/request.d.ts.map +1 -0
  78. package/dist/cjs/request.js +35 -0
  79. package/dist/cjs/request.js.map +1 -0
  80. package/dist/cjs/signature.d.ts +47 -0
  81. package/dist/cjs/signature.d.ts.map +1 -0
  82. package/dist/cjs/signature.js +147 -0
  83. package/dist/cjs/signature.js.map +1 -0
  84. package/dist/cjs/tasks.d.ts +32 -0
  85. package/dist/cjs/tasks.d.ts.map +1 -0
  86. package/dist/cjs/tasks.js +51 -0
  87. package/dist/cjs/tasks.js.map +1 -0
  88. package/dist/cjs/types.d.ts +64 -0
  89. package/dist/cjs/types.d.ts.map +1 -0
  90. package/dist/cjs/types.js +78 -0
  91. package/dist/cjs/types.js.map +1 -0
  92. package/dist/cjs/units.d.ts +22 -0
  93. package/dist/cjs/units.d.ts.map +1 -0
  94. package/dist/cjs/units.js +51 -0
  95. package/dist/cjs/units.js.map +1 -0
  96. package/dist/cjs/withdrawal.d.ts +72 -0
  97. package/dist/cjs/withdrawal.d.ts.map +1 -0
  98. package/dist/cjs/withdrawal.js +93 -0
  99. package/dist/cjs/withdrawal.js.map +1 -0
  100. package/dist/esm/account.d.ts +165 -0
  101. package/dist/esm/account.d.ts.map +1 -0
  102. package/dist/esm/account.js +505 -0
  103. package/dist/esm/account.js.map +1 -0
  104. package/dist/esm/address.d.ts +67 -0
  105. package/dist/esm/address.d.ts.map +1 -0
  106. package/dist/esm/address.js +125 -0
  107. package/dist/esm/address.js.map +1 -0
  108. package/dist/esm/authorization.d.ts +41 -0
  109. package/dist/esm/authorization.d.ts.map +1 -0
  110. package/dist/esm/authorization.js +126 -0
  111. package/dist/esm/authorization.js.map +1 -0
  112. package/dist/esm/bal.d.ts +129 -0
  113. package/dist/esm/bal.d.ts.map +1 -0
  114. package/dist/esm/bal.js +522 -0
  115. package/dist/esm/bal.js.map +1 -0
  116. package/dist/esm/binaryTree.d.ts +148 -0
  117. package/dist/esm/binaryTree.d.ts.map +1 -0
  118. package/dist/esm/binaryTree.js +226 -0
  119. package/dist/esm/binaryTree.js.map +1 -0
  120. package/dist/esm/blobs.d.ts +76 -0
  121. package/dist/esm/blobs.d.ts.map +1 -0
  122. package/dist/esm/blobs.js +163 -0
  123. package/dist/esm/blobs.js.map +1 -0
  124. package/dist/esm/bytes.d.ts +291 -0
  125. package/dist/esm/bytes.d.ts.map +1 -0
  126. package/dist/esm/bytes.js +562 -0
  127. package/dist/esm/bytes.js.map +1 -0
  128. package/dist/esm/constants.d.ts +91 -0
  129. package/dist/esm/constants.d.ts.map +1 -0
  130. package/dist/esm/constants.js +94 -0
  131. package/dist/esm/constants.js.map +1 -0
  132. package/dist/esm/db.d.ts +65 -0
  133. package/dist/esm/db.d.ts.map +1 -0
  134. package/dist/esm/db.js +11 -0
  135. package/dist/esm/db.js.map +1 -0
  136. package/dist/esm/env.d.ts +9 -0
  137. package/dist/esm/env.d.ts.map +1 -0
  138. package/dist/esm/env.js +9 -0
  139. package/dist/esm/env.js.map +1 -0
  140. package/dist/esm/errors.d.ts +3 -0
  141. package/dist/esm/errors.d.ts.map +1 -0
  142. package/dist/esm/errors.js +14 -0
  143. package/dist/esm/errors.js.map +1 -0
  144. package/dist/esm/helpers.d.ts +21 -0
  145. package/dist/esm/helpers.d.ts.map +1 -0
  146. package/dist/esm/helpers.js +43 -0
  147. package/dist/esm/helpers.js.map +1 -0
  148. package/dist/esm/index.d.ts +67 -0
  149. package/dist/esm/index.d.ts.map +1 -0
  150. package/dist/esm/index.js +67 -0
  151. package/dist/esm/index.js.map +1 -0
  152. package/dist/esm/internal.d.ts +72 -0
  153. package/dist/esm/internal.d.ts.map +1 -0
  154. package/dist/esm/internal.js +170 -0
  155. package/dist/esm/internal.js.map +1 -0
  156. package/dist/esm/kzg.d.ts +14 -0
  157. package/dist/esm/kzg.d.ts.map +1 -0
  158. package/dist/esm/kzg.js +2 -0
  159. package/dist/esm/kzg.js.map +1 -0
  160. package/dist/esm/lock.d.ts +15 -0
  161. package/dist/esm/lock.d.ts.map +1 -0
  162. package/dist/esm/lock.js +41 -0
  163. package/dist/esm/lock.js.map +1 -0
  164. package/dist/esm/mapDB.d.ts +17 -0
  165. package/dist/esm/mapDB.d.ts.map +1 -0
  166. package/dist/esm/mapDB.js +42 -0
  167. package/dist/esm/mapDB.js.map +1 -0
  168. package/dist/esm/package.json +3 -0
  169. package/dist/esm/provider.d.ts +46 -0
  170. package/dist/esm/provider.d.ts.map +1 -0
  171. package/dist/esm/provider.js +79 -0
  172. package/dist/esm/provider.js.map +1 -0
  173. package/dist/esm/request.d.ts +20 -0
  174. package/dist/esm/request.d.ts.map +1 -0
  175. package/dist/esm/request.js +30 -0
  176. package/dist/esm/request.js.map +1 -0
  177. package/dist/esm/signature.d.ts +47 -0
  178. package/dist/esm/signature.d.ts.map +1 -0
  179. package/dist/esm/signature.js +137 -0
  180. package/dist/esm/signature.js.map +1 -0
  181. package/dist/esm/tasks.d.ts +32 -0
  182. package/dist/esm/tasks.d.ts.map +1 -0
  183. package/dist/esm/tasks.js +47 -0
  184. package/dist/esm/tasks.js.map +1 -0
  185. package/dist/esm/types.d.ts +64 -0
  186. package/dist/esm/types.d.ts.map +1 -0
  187. package/dist/esm/types.js +71 -0
  188. package/dist/esm/types.js.map +1 -0
  189. package/dist/esm/units.d.ts +22 -0
  190. package/dist/esm/units.d.ts.map +1 -0
  191. package/dist/esm/units.js +46 -0
  192. package/dist/esm/units.js.map +1 -0
  193. package/dist/esm/withdrawal.d.ts +72 -0
  194. package/dist/esm/withdrawal.d.ts.map +1 -0
  195. package/dist/esm/withdrawal.js +86 -0
  196. package/dist/esm/withdrawal.js.map +1 -0
  197. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
  198. package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
  199. package/package.json +116 -0
  200. package/src/account.ts +630 -0
  201. package/src/address.ts +158 -0
  202. package/src/authorization.ts +180 -0
  203. package/src/bal.ts +761 -0
  204. package/src/binaryTree.ts +353 -0
  205. package/src/blobs.ts +209 -0
  206. package/src/bytes.ts +659 -0
  207. package/src/constants.ts +125 -0
  208. package/src/db.ts +86 -0
  209. package/src/env.ts +9 -0
  210. package/src/errors.ts +28 -0
  211. package/src/helpers.ts +46 -0
  212. package/src/index.ts +88 -0
  213. package/src/internal.ts +212 -0
  214. package/src/kzg.ts +24 -0
  215. package/src/lock.ts +42 -0
  216. package/src/mapDB.ts +57 -0
  217. package/src/provider.ts +109 -0
  218. package/src/request.ts +48 -0
  219. package/src/signature.ts +202 -0
  220. package/src/tasks.ts +59 -0
  221. package/src/types.ts +177 -0
  222. package/src/units.ts +56 -0
  223. package/src/withdrawal.ts +133 -0
@@ -0,0 +1,606 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.utf8ToBytes = exports.concatBytes = exports.randomBytes = exports.compareBytes = exports.intToUnpaddedBytes = exports.bigIntToAddressBytes = exports.bigIntToUnpaddedBytes = exports.bigIntMin = exports.bigIntMax = exports.bigIntToHex = exports.validateNoLeadingZeroes = exports.short = exports.addHexPrefix = exports.toUnsigned = exports.fromSigned = exports.toBytes = exports.unpadHex = exports.unpadArray = exports.unpadBytes = exports.setLengthRight = exports.setLengthLeft = exports.bigIntToBytes = exports.intToBytes = exports.intToHex = exports.bytesToInt = exports.bytesToBigInt = exports.bytesToHex = exports.unprefixedHexToBytes = exports.hexToBytes = exports.bytesToUnprefixedHex = void 0;
4
+ exports.bytesToInt32 = bytesToInt32;
5
+ exports.bytesToBigInt64 = bytesToBigInt64;
6
+ exports.int32ToBytes = int32ToBytes;
7
+ exports.bigInt64ToBytes = bigInt64ToBytes;
8
+ exports.bytesToUtf8 = bytesToUtf8;
9
+ exports.equalsBytes = equalsBytes;
10
+ exports.hexToBigInt = hexToBigInt;
11
+ exports.bytesToBits = bytesToBits;
12
+ exports.bitsToBytes = bitsToBytes;
13
+ exports.matchingBytesLength = matchingBytesLength;
14
+ exports.matchingBitsLength = matchingBitsLength;
15
+ exports.equalsBits = equalsBits;
16
+ const utils_js_1 = require("@noble/hashes/utils.js");
17
+ const errors_ts_1 = require("./errors.js");
18
+ const helpers_ts_1 = require("./helpers.js");
19
+ const internal_ts_1 = require("./internal.js");
20
+ const BIGINT_0 = BigInt(0);
21
+ /**
22
+ * @deprecated
23
+ */
24
+ exports.bytesToUnprefixedHex = utils_js_1.bytesToHex;
25
+ /**
26
+ * Converts a {@link PrefixedHexString} to a {@link Uint8Array}
27
+ * @param {PrefixedHexString} hex The 0x-prefixed hex string to convert
28
+ * @returns {Uint8Array} The converted bytes
29
+ * @throws If the input is not a valid 0x-prefixed hex string
30
+ */
31
+ const hexToBytes = (hex) => {
32
+ if (!hex.startsWith('0x'))
33
+ throw (0, errors_ts_1.EthereumJSErrorWithoutCode)('input string must be 0x prefixed');
34
+ return (0, utils_js_1.hexToBytes)((0, internal_ts_1.padToEven)((0, internal_ts_1.stripHexPrefix)(hex)));
35
+ };
36
+ exports.hexToBytes = hexToBytes;
37
+ const unprefixedHexToBytes = (hex) => {
38
+ if (hex.startsWith('0x'))
39
+ throw (0, errors_ts_1.EthereumJSErrorWithoutCode)('input string cannot be 0x prefixed');
40
+ return (0, utils_js_1.hexToBytes)((0, internal_ts_1.padToEven)(hex));
41
+ };
42
+ exports.unprefixedHexToBytes = unprefixedHexToBytes;
43
+ /**
44
+ * Converts a {@link Uint8Array} to a {@link PrefixedHexString}
45
+ * @param {Uint8Array} bytes the bytes to convert
46
+ * @returns {PrefixedHexString} the hex string
47
+ * @dev Returns `0x` if provided an empty Uint8Array
48
+ */
49
+ const bytesToHex = (bytes) => {
50
+ // Using deprecated bytesToUnprefixedHex for performance: bytesToHex is a wrapper that adds the 0x prefix.
51
+ // Using bytesToUnprefixedHex directly avoids creating an intermediate prefixed string and then stripping it.
52
+ const unprefixedHex = (0, exports.bytesToUnprefixedHex)(bytes);
53
+ return `0x${unprefixedHex}`;
54
+ };
55
+ exports.bytesToHex = bytesToHex;
56
+ // BigInt cache for the numbers 0 - 256*256-1 (two-byte bytes)
57
+ const BIGINT_CACHE = [];
58
+ for (let i = 0; i <= 256 * 256 - 1; i++) {
59
+ BIGINT_CACHE[i] = BigInt(i);
60
+ }
61
+ /**
62
+ * Converts a {@link Uint8Array} to a {@link bigint}
63
+ * @param {Uint8Array} bytes the bytes to convert
64
+ * @returns {bigint}
65
+ */
66
+ const bytesToBigInt = (bytes, littleEndian = false) => {
67
+ (0, helpers_ts_1.assertIsBytes)(bytes);
68
+ if (littleEndian) {
69
+ bytes = bytes.slice().reverse();
70
+ }
71
+ const hex = (0, exports.bytesToHex)(bytes);
72
+ if (hex === '0x') {
73
+ return BIGINT_0;
74
+ }
75
+ if (hex.length === 4) {
76
+ // If the byte length is 1 (this is faster than checking `bytes.length === 1`)
77
+ return BIGINT_CACHE[bytes[0]];
78
+ }
79
+ if (hex.length === 6) {
80
+ return BIGINT_CACHE[bytes[0] * 256 + bytes[1]];
81
+ }
82
+ return BigInt(hex);
83
+ };
84
+ exports.bytesToBigInt = bytesToBigInt;
85
+ /**
86
+ * Converts a {@link Uint8Array} to a {@link number}.
87
+ * @param {Uint8Array} bytes the bytes to convert
88
+ * @return {number}
89
+ * @throws If the input number exceeds 53 bits.
90
+ */
91
+ const bytesToInt = (bytes) => {
92
+ const res = Number((0, exports.bytesToBigInt)(bytes));
93
+ if (!Number.isSafeInteger(res))
94
+ throw (0, errors_ts_1.EthereumJSErrorWithoutCode)('Number exceeds 53 bits');
95
+ return res;
96
+ };
97
+ exports.bytesToInt = bytesToInt;
98
+ /******************************************/
99
+ /**
100
+ * Converts a {@link number} into a {@link PrefixedHexString}
101
+ * @param {number} i
102
+ * @return {PrefixedHexString}
103
+ */
104
+ const intToHex = (i) => {
105
+ if (!Number.isSafeInteger(i) || i < 0) {
106
+ throw (0, errors_ts_1.EthereumJSErrorWithoutCode)(`Received an invalid integer type: ${i}`);
107
+ }
108
+ return `0x${i.toString(16)}`;
109
+ };
110
+ exports.intToHex = intToHex;
111
+ /**
112
+ * Converts an {@link number} to a {@link Uint8Array}
113
+ * @param {Number} i
114
+ * @return {Uint8Array}
115
+ */
116
+ const intToBytes = (i) => {
117
+ const hex = (0, exports.intToHex)(i);
118
+ return (0, exports.hexToBytes)(hex);
119
+ };
120
+ exports.intToBytes = intToBytes;
121
+ /**
122
+ * Converts a {@link bigint} to a {@link Uint8Array}
123
+ * * @param {bigint} num the bigint to convert
124
+ * @returns {Uint8Array}
125
+ */
126
+ const bigIntToBytes = (num, littleEndian = false) => {
127
+ const bytes = (0, exports.hexToBytes)(`0x${(0, internal_ts_1.padToEven)(num.toString(16))}`);
128
+ return littleEndian ? bytes.reverse() : bytes;
129
+ };
130
+ exports.bigIntToBytes = bigIntToBytes;
131
+ /**
132
+ * Pads a `Uint8Array` with zeros till it has `length` bytes.
133
+ * Throws if input length exceeds target length, unless allowTruncate is true.
134
+ * @param {Uint8Array} msg the value to pad
135
+ * @param {number} length the number of bytes the output should be
136
+ * @param {boolean} right whether to start padding from the left or right
137
+ * @param {boolean} allowTruncate whether to allow truncation if msg exceeds length
138
+ * @return {Uint8Array}
139
+ */
140
+ const setLength = (msg, length, right, allowTruncate) => {
141
+ if (msg.length > length) {
142
+ if (!allowTruncate) {
143
+ throw (0, errors_ts_1.EthereumJSErrorWithoutCode)(`Input length ${msg.length} exceeds target length ${length}. Use allowTruncate option to truncate.`);
144
+ }
145
+ return right ? msg.subarray(0, length) : msg.subarray(-length);
146
+ }
147
+ if (msg.length < length) {
148
+ return right
149
+ ? new Uint8Array([...msg, ...new Uint8Array(length - msg.length)])
150
+ : new Uint8Array([...new Uint8Array(length - msg.length), ...msg]);
151
+ }
152
+ return msg;
153
+ };
154
+ /**
155
+ * Left Pads a `Uint8Array` with leading zeros till it has `length` bytes.
156
+ * Throws if input length exceeds target length, unless allowTruncate option is true.
157
+ * @param {Uint8Array} msg the value to pad
158
+ * @param {number} length the number of bytes the output should be
159
+ * @param {SetLengthOpts} opts options object with allowTruncate flag
160
+ * @return {Uint8Array}
161
+ */
162
+ const setLengthLeft = (msg, length, opts = {}) => {
163
+ (0, helpers_ts_1.assertIsBytes)(msg);
164
+ return setLength(msg, length, false, opts.allowTruncate ?? false);
165
+ };
166
+ exports.setLengthLeft = setLengthLeft;
167
+ /**
168
+ * Right Pads a `Uint8Array` with trailing zeros till it has `length` bytes.
169
+ * Throws if input length exceeds target length, unless allowTruncate option is true.
170
+ * @param {Uint8Array} msg the value to pad
171
+ * @param {number} length the number of bytes the output should be
172
+ * @param {SetLengthOpts} opts options object with allowTruncate flag
173
+ * @return {Uint8Array}
174
+ */
175
+ const setLengthRight = (msg, length, opts = {}) => {
176
+ (0, helpers_ts_1.assertIsBytes)(msg);
177
+ return setLength(msg, length, true, opts.allowTruncate ?? false);
178
+ };
179
+ exports.setLengthRight = setLengthRight;
180
+ /**
181
+ * Trims leading zeros from a `Uint8Array`, `number[]` or `string`.
182
+ * @param {Uint8Array|number[]|string} a
183
+ * @return {Uint8Array|number[]|string}
184
+ */
185
+ const stripZeros = (a) => {
186
+ let first = a[0];
187
+ while (a.length > 0 && first.toString() === '0') {
188
+ a = a.slice(1);
189
+ first = a[0];
190
+ }
191
+ return a;
192
+ };
193
+ /**
194
+ * Trims leading zeros from a `Uint8Array`.
195
+ * @param {Uint8Array} a
196
+ * @return {Uint8Array}
197
+ */
198
+ const unpadBytes = (a) => {
199
+ (0, helpers_ts_1.assertIsBytes)(a);
200
+ return stripZeros(a);
201
+ };
202
+ exports.unpadBytes = unpadBytes;
203
+ /**
204
+ * Trims leading zeros from an `Array` (of numbers).
205
+ * @param {number[]} a
206
+ * @return {number[]}
207
+ */
208
+ const unpadArray = (a) => {
209
+ (0, helpers_ts_1.assertIsArray)(a);
210
+ return stripZeros(a);
211
+ };
212
+ exports.unpadArray = unpadArray;
213
+ /**
214
+ * Trims leading zeros from a `PrefixedHexString`.
215
+ * @param {PrefixedHexString} a
216
+ * @return {PrefixedHexString}
217
+ */
218
+ const unpadHex = (a) => {
219
+ (0, helpers_ts_1.assertIsHexString)(a);
220
+ return `0x${stripZeros((0, internal_ts_1.stripHexPrefix)(a))}`;
221
+ };
222
+ exports.unpadHex = unpadHex;
223
+ /**
224
+ * Attempts to turn a value into a `Uint8Array`.
225
+ * Inputs supported: `Buffer`, `Uint8Array`, `String` (hex-prefixed), `Number`, null/undefined, `BigInt` and other objects
226
+ * with a `toArray()` or `toBytes()` method.
227
+ * @param {ToBytesInputTypes} v the value
228
+ * @return {Uint8Array}
229
+ */
230
+ const toBytes = (v) => {
231
+ if (v === null || v === undefined) {
232
+ return new Uint8Array();
233
+ }
234
+ if (Array.isArray(v) || v instanceof Uint8Array) {
235
+ return Uint8Array.from(v);
236
+ }
237
+ if (typeof v === 'string') {
238
+ if (!(0, internal_ts_1.isHexString)(v)) {
239
+ throw (0, errors_ts_1.EthereumJSErrorWithoutCode)(`Cannot convert string to Uint8Array. toBytes only supports 0x-prefixed hex strings and this string was given: ${v}`);
240
+ }
241
+ return (0, exports.hexToBytes)(v);
242
+ }
243
+ if (typeof v === 'number') {
244
+ return (0, exports.intToBytes)(v);
245
+ }
246
+ if (typeof v === 'bigint') {
247
+ if (v < BIGINT_0) {
248
+ throw (0, errors_ts_1.EthereumJSErrorWithoutCode)(`Cannot convert negative bigint to Uint8Array. Given: ${v}`);
249
+ }
250
+ let n = v.toString(16);
251
+ if (n.length % 2)
252
+ n = '0' + n;
253
+ return (0, exports.unprefixedHexToBytes)(n);
254
+ }
255
+ if (v.toBytes !== undefined) {
256
+ // converts a `TransformableToBytes` object to a Uint8Array
257
+ return v.toBytes();
258
+ }
259
+ throw (0, errors_ts_1.EthereumJSErrorWithoutCode)('invalid type');
260
+ };
261
+ exports.toBytes = toBytes;
262
+ /**
263
+ * Interprets a `Uint8Array` as a signed integer and returns a `BigInt`. Assumes 256-bit numbers.
264
+ * @param {Uint8Array} num Signed integer value
265
+ * @returns {bigint}
266
+ */
267
+ const fromSigned = (num) => {
268
+ return BigInt.asIntN(256, (0, exports.bytesToBigInt)(num));
269
+ };
270
+ exports.fromSigned = fromSigned;
271
+ /**
272
+ * Converts a `BigInt` to an unsigned integer and returns it as a `Uint8Array`. Assumes 256-bit numbers.
273
+ * @param {bigint} num
274
+ * @returns {Uint8Array}
275
+ */
276
+ const toUnsigned = (num) => {
277
+ return (0, exports.bigIntToBytes)(BigInt.asUintN(256, num));
278
+ };
279
+ exports.toUnsigned = toUnsigned;
280
+ /**
281
+ * Adds "0x" to a given `string` if it does not already start with "0x".
282
+ * @param {string} str
283
+ * @return {PrefixedHexString}
284
+ */
285
+ const addHexPrefix = (str) => {
286
+ if (typeof str !== 'string') {
287
+ return str;
288
+ }
289
+ return (0, internal_ts_1.isHexString)(str) ? str : `0x${str}`;
290
+ };
291
+ exports.addHexPrefix = addHexPrefix;
292
+ /**
293
+ * Shortens a string or Uint8Array's hex string representation to maxLength (default 50).
294
+ *
295
+ * Examples:
296
+ *
297
+ * Input: '657468657265756d000000000000000000000000000000000000000000000000'
298
+ * Output: '657468657265756d0000000000000000000000000000000000…'
299
+ * @param {Uint8Array | string} bytes
300
+ * @param {number} maxLength
301
+ * @return {string}
302
+ */
303
+ const short = (bytes, maxLength = 50) => {
304
+ const byteStr = bytes instanceof Uint8Array ? (0, exports.bytesToHex)(bytes) : bytes;
305
+ const len = byteStr.slice(0, 2) === '0x' ? maxLength + 2 : maxLength;
306
+ if (byteStr.length <= len) {
307
+ return byteStr;
308
+ }
309
+ return byteStr.slice(0, len) + '…';
310
+ };
311
+ exports.short = short;
312
+ /**
313
+ * Checks provided Uint8Array for leading zeroes and throws if found.
314
+ *
315
+ * Examples:
316
+ *
317
+ * Valid values: 0x1, 0x, 0x01, 0x1234
318
+ * Invalid values: 0x0, 0x00, 0x001, 0x0001
319
+ *
320
+ * Note: This method is useful for validating that RLP encoded integers comply with the rule that all
321
+ * integer values encoded to RLP must be in the most compact form and contain no leading zero bytes
322
+ * @param values An object containing string keys and Uint8Array values
323
+ * @throws if any provided value is found to have leading zero bytes
324
+ */
325
+ const validateNoLeadingZeroes = (values) => {
326
+ for (const [k, v] of Object.entries(values)) {
327
+ if (v !== undefined && v.length > 0 && v[0] === 0) {
328
+ throw (0, errors_ts_1.EthereumJSErrorWithoutCode)(`${k} cannot have leading zeroes, received: ${(0, exports.bytesToHex)(v)}`);
329
+ }
330
+ }
331
+ };
332
+ exports.validateNoLeadingZeroes = validateNoLeadingZeroes;
333
+ /**
334
+ * Converts a {@link bigint} to a `0x` prefixed hex string
335
+ * @param {bigint} num the bigint to convert
336
+ * @returns {PrefixedHexString}
337
+ */
338
+ const bigIntToHex = (num) => {
339
+ return `0x${num.toString(16)}`;
340
+ };
341
+ exports.bigIntToHex = bigIntToHex;
342
+ /**
343
+ * Calculates max bigint from an array of bigints
344
+ * @param args array of bigints
345
+ */
346
+ const bigIntMax = (...args) => args.reduce((m, e) => (e > m ? e : m));
347
+ exports.bigIntMax = bigIntMax;
348
+ /**
349
+ * Calculates min BigInt from an array of BigInts
350
+ * @param args array of bigints
351
+ */
352
+ const bigIntMin = (...args) => args.reduce((m, e) => (e < m ? e : m));
353
+ exports.bigIntMin = bigIntMin;
354
+ /**
355
+ * Convert value from bigint to an unpadded Uint8Array
356
+ * (useful for RLP transport)
357
+ * @param {bigint} value the bigint to convert
358
+ * @returns {Uint8Array}
359
+ */
360
+ const bigIntToUnpaddedBytes = (value) => {
361
+ return (0, exports.unpadBytes)((0, exports.bigIntToBytes)(value));
362
+ };
363
+ exports.bigIntToUnpaddedBytes = bigIntToUnpaddedBytes;
364
+ const bigIntToAddressBytes = (value, strict = true) => {
365
+ const addressBytes = (0, exports.bigIntToBytes)(value);
366
+ if (strict && addressBytes.length > 20) {
367
+ throw Error(`Invalid address bytes length=${addressBytes.length} strict=${strict}`);
368
+ }
369
+ // When not strict, allow truncation of values larger than 20 bytes
370
+ return (0, exports.setLengthLeft)(addressBytes, 20, { allowTruncate: !strict });
371
+ };
372
+ exports.bigIntToAddressBytes = bigIntToAddressBytes;
373
+ /**
374
+ * Convert value from number to an unpadded Uint8Array
375
+ * (useful for RLP transport)
376
+ * @param {number} value the bigint to convert
377
+ * @returns {Uint8Array}
378
+ */
379
+ const intToUnpaddedBytes = (value) => {
380
+ return (0, exports.unpadBytes)((0, exports.intToBytes)(value));
381
+ };
382
+ exports.intToUnpaddedBytes = intToUnpaddedBytes;
383
+ /**
384
+ * Compares two Uint8Arrays and returns a number indicating their order in a sorted array.
385
+ *
386
+ * @param {Uint8Array} value1 - The first Uint8Array to compare.
387
+ * @param {Uint8Array} value2 - The second Uint8Array to compare.
388
+ * @returns {number} A positive number if value1 is larger than value2,
389
+ * A negative number if value1 is smaller than value2,
390
+ * or 0 if value1 and value2 are equal.
391
+ */
392
+ const compareBytes = (value1, value2) => {
393
+ const bigIntValue1 = (0, exports.bytesToBigInt)(value1);
394
+ const bigIntValue2 = (0, exports.bytesToBigInt)(value2);
395
+ return bigIntValue1 > bigIntValue2 ? 1 : bigIntValue1 < bigIntValue2 ? -1 : 0;
396
+ };
397
+ exports.compareBytes = compareBytes;
398
+ /**
399
+ * Generates a Uint8Array of random bytes of specified length.
400
+ *
401
+ * @param {number} length - The length of the Uint8Array.
402
+ * @returns {Uint8Array} A Uint8Array of random bytes of specified length.
403
+ */
404
+ const randomBytes = (length) => {
405
+ return (0, utils_js_1.randomBytes)(length);
406
+ };
407
+ exports.randomBytes = randomBytes;
408
+ /**
409
+ * This mirrors the functionality of the `ethereum-cryptography` export except
410
+ * it skips the check to validate that every element of `arrays` is indeed a `uint8Array`
411
+ * Can give small performance gains on large arrays
412
+ * @param {Uint8Array[]} arrays an array of Uint8Arrays
413
+ * @returns {Uint8Array} one Uint8Array with all the elements of the original set
414
+ * works like `Buffer.concat`
415
+ */
416
+ const concatBytes = (...arrays) => {
417
+ if (arrays.length === 1)
418
+ return arrays[0];
419
+ const length = arrays.reduce((a, arr) => a + arr.length, 0);
420
+ const result = new Uint8Array(length);
421
+ for (let i = 0, pad = 0; i < arrays.length; i++) {
422
+ const arr = arrays[i];
423
+ result.set(arr, pad);
424
+ pad += arr.length;
425
+ }
426
+ return result;
427
+ };
428
+ exports.concatBytes = concatBytes;
429
+ /**
430
+ * @notice Convert a Uint8Array to a 32-bit integer
431
+ * @param {Uint8Array} bytes The input Uint8Array from which to read the 32-bit integer.
432
+ * @param {boolean} littleEndian True for little-endian, undefined or false for big-endian.
433
+ * @return {number} The 32-bit integer read from the input Uint8Array.
434
+ */
435
+ function bytesToInt32(bytes, littleEndian = false) {
436
+ if (bytes.length < 4) {
437
+ bytes = setLength(bytes, 4, littleEndian, false);
438
+ }
439
+ const dataView = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
440
+ return dataView.getUint32(0, littleEndian);
441
+ }
442
+ /**
443
+ * @notice Convert a Uint8Array to a 64-bit bigint
444
+ * @param {Uint8Array} bytes The input Uint8Array from which to read the 64-bit bigint.
445
+ * @param {boolean} littleEndian True for little-endian, undefined or false for big-endian.
446
+ * @return {bigint} The 64-bit bigint read from the input Uint8Array.
447
+ */
448
+ function bytesToBigInt64(bytes, littleEndian = false) {
449
+ if (bytes.length < 8) {
450
+ bytes = setLength(bytes, 8, littleEndian, false);
451
+ }
452
+ const dataView = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
453
+ return dataView.getBigUint64(0, littleEndian);
454
+ }
455
+ /**
456
+ * @notice Convert a 32-bit integer to a Uint8Array.
457
+ * @param {number} value The 32-bit integer to convert.
458
+ * @param {boolean} littleEndian True for little-endian, undefined or false for big-endian.
459
+ * @return {Uint8Array} A Uint8Array of length 4 containing the integer.
460
+ */
461
+ function int32ToBytes(value, littleEndian = false) {
462
+ const buffer = new ArrayBuffer(4);
463
+ const dataView = new DataView(buffer);
464
+ dataView.setUint32(0, value, littleEndian);
465
+ return new Uint8Array(buffer);
466
+ }
467
+ /**
468
+ * @notice Convert a 64-bit bigint to a Uint8Array.
469
+ * @param {bigint} value The 64-bit bigint to convert.
470
+ * @param {boolean} littleEndian True for little-endian, undefined or false for big-endian.
471
+ * @return {Uint8Array} A Uint8Array of length 8 containing the bigint.
472
+ */
473
+ function bigInt64ToBytes(value, littleEndian = false) {
474
+ const buffer = new ArrayBuffer(8);
475
+ const dataView = new DataView(buffer);
476
+ dataView.setBigUint64(0, value, littleEndian);
477
+ return new Uint8Array(buffer);
478
+ }
479
+ var utils_js_2 = require("@noble/hashes/utils.js");
480
+ Object.defineProperty(exports, "utf8ToBytes", { enumerable: true, get: function () { return utils_js_2.utf8ToBytes; } });
481
+ /**
482
+ * @notice Converts a Uint8Array to a UTF-8 string.
483
+ * Implementation copied from ethereum-cryptography https://github.com/ethereum/js-ethereum-cryptography/blob/31f980b2847545d33268f2510ba38a3836202a44/src/utils.ts#L22-L27
484
+ * @param {Uint8Array} bytes - The input Uint8Array to convert.
485
+ * @returns {string} The UTF-8 string.
486
+ * @throws {TypeError} If the input is not a Uint8Array.
487
+ *
488
+ */
489
+ function bytesToUtf8(bytes) {
490
+ if (!(bytes instanceof Uint8Array)) {
491
+ throw new TypeError(`bytesToUtf8 expected Uint8Array, got ${typeof bytes}`);
492
+ }
493
+ return new TextDecoder().decode(bytes);
494
+ }
495
+ /**
496
+ * @notice Compares two Uint8Arrays and returns true if they are equal.
497
+ * Implementation copied from ethereum-cryptography https://github.com/ethereum/js-ethereum-cryptography/blob/main/src/utils.ts#L35-L45
498
+ * @param {Uint8Array} a - The first Uint8Array to compare.
499
+ * @param {Uint8Array} b - The second Uint8Array to compare.
500
+ * @returns {boolean} True if the Uint8Arrays are equal, false otherwise.
501
+ */
502
+ function equalsBytes(a, b) {
503
+ if (a.length !== b.length) {
504
+ return false;
505
+ }
506
+ for (let i = 0; i < a.length; i++) {
507
+ if (a[i] !== b[i]) {
508
+ return false;
509
+ }
510
+ }
511
+ return true;
512
+ }
513
+ function hexToBigInt(input) {
514
+ return (0, exports.bytesToBigInt)((0, exports.hexToBytes)((0, internal_ts_1.isHexString)(input) ? input : `0x${input}`));
515
+ }
516
+ /**
517
+ * Converts a Uint8Array of bytes into an array of bits.
518
+ * @param {Uint8Array} bytes - The input byte array.
519
+ * @param {number} bitLength - The number of bits to extract from the input bytes.
520
+ * @returns {number[]} An array of bits (each 0 or 1) corresponding to the input bytes.
521
+ */
522
+ function bytesToBits(bytes, bitLength) {
523
+ const bits = [];
524
+ for (let i = 0; i < (bitLength ?? bytes.length * 8); i++) {
525
+ const byteIndex = Math.floor(i / 8);
526
+ const bitIndex = 7 - (i % 8);
527
+ bits.push((bytes[byteIndex] >> bitIndex) & 1);
528
+ }
529
+ return bits;
530
+ }
531
+ /**
532
+ * Converts an array of bits into a Uint8Array.
533
+ * The input bits are grouped into sets of 8, with the first bit in each group being the most significant.
534
+ * @param {number[]} bits - The input array of bits (each should be 0 or 1). Its length should be a multiple of 8.
535
+ * @returns {Uint8Array} A Uint8Array constructed from the input bits.
536
+ */
537
+ function bitsToBytes(bits) {
538
+ const numBytes = Math.ceil(bits.length / 8); // Ensure partial byte storage
539
+ const byteData = new Uint8Array(numBytes);
540
+ for (let i = 0; i < bits.length; i++) {
541
+ const byteIndex = Math.floor(i / 8);
542
+ const bitIndex = 7 - (i % 8);
543
+ byteData[byteIndex] |= bits[i] << bitIndex;
544
+ }
545
+ return byteData;
546
+ }
547
+ /**
548
+ * Compares two byte arrays and returns the count of consecutively matching items from the start.
549
+ * @param {Uint8Array} bytes1 - The first Uint8Array to compare.
550
+ * @param {Uint8Array} bytes2 - The second Uint8Array to compare.
551
+ * @returns {number} The count of consecutively matching items from the start.
552
+ */
553
+ function matchingBytesLength(bytes1, bytes2) {
554
+ let count = 0;
555
+ const minLength = Math.min(bytes1.length, bytes2.length);
556
+ for (let i = 0; i < minLength; i++) {
557
+ if (bytes1[i] === bytes2[i]) {
558
+ count++;
559
+ }
560
+ else {
561
+ // Break early if a mismatch is found
562
+ break;
563
+ }
564
+ }
565
+ return count;
566
+ }
567
+ /**
568
+ * Compares two arrays of bits (0 or 1) and returns the count of consecutively matching bits from the start.
569
+ * @param {number[]} bits1 - The first array of bits, in bytes or bits.
570
+ * @param {number[]} bits2 - The second array of bits, in bytes or bits.
571
+ * @returns {number} The count of consecutively matching bits from the start.
572
+ */
573
+ function matchingBitsLength(bits1, bits2) {
574
+ let count = 0;
575
+ const minLength = Math.min(bits1.length, bits2.length);
576
+ for (let i = 0; i < minLength; i++) {
577
+ if (bits1[i] === bits2[i]) {
578
+ count++;
579
+ }
580
+ else {
581
+ return count;
582
+ }
583
+ }
584
+ return count;
585
+ }
586
+ /**
587
+ * Checks whether two arrays of bits are equal.
588
+ *
589
+ * Two arrays are considered equal if they have the same length and each corresponding element is identical.
590
+ *
591
+ * @param {number[]} bits1 - The first bits array.
592
+ * @param {number[]} bits2 - The second bits array.
593
+ * @returns {boolean} True if the arrays are equal; otherwise, false.
594
+ */
595
+ function equalsBits(bits1, bits2) {
596
+ if (bits1.length !== bits2.length) {
597
+ return false;
598
+ }
599
+ for (let i = 0; i < bits1.length; i++) {
600
+ if (bits1[i] !== bits2[i]) {
601
+ return false;
602
+ }
603
+ }
604
+ return true;
605
+ }
606
+ //# sourceMappingURL=bytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/bytes.ts"],"names":[],"mappings":"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"}