@btc-vision/bitcoin 6.5.6 → 7.0.0-alpha.1

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 (456) hide show
  1. package/HOW_TO_WRITE_GOOD_CODE.md +2436 -0
  2. package/benchmark/psbt-2000-inputs.bench.ts +178 -0
  3. package/benchmark/signing.bench.ts +147 -0
  4. package/browser/address.d.ts +57 -10
  5. package/browser/address.d.ts.map +1 -0
  6. package/browser/bech32utils.d.ts +9 -1
  7. package/browser/bech32utils.d.ts.map +1 -0
  8. package/browser/bip66.d.ts +11 -6
  9. package/browser/bip66.d.ts.map +1 -0
  10. package/browser/block.d.ts +117 -11
  11. package/browser/block.d.ts.map +1 -0
  12. package/browser/branded.d.ts +20 -0
  13. package/browser/branded.d.ts.map +1 -0
  14. package/browser/crypto/crypto.d.ts +1 -0
  15. package/browser/crypto/crypto.d.ts.map +1 -0
  16. package/browser/crypto.d.ts +46 -7
  17. package/browser/crypto.d.ts.map +1 -0
  18. package/browser/ecc/context.d.ts +129 -0
  19. package/browser/ecc/context.d.ts.map +1 -0
  20. package/browser/ecc/index.d.ts +11 -0
  21. package/browser/ecc/index.d.ts.map +1 -0
  22. package/browser/ecc/types.d.ts +128 -0
  23. package/browser/ecc/types.d.ts.map +1 -0
  24. package/browser/ecpair.d.ts +99 -0
  25. package/browser/errors.d.ts +124 -0
  26. package/browser/errors.d.ts.map +1 -0
  27. package/browser/index.d.ts +32 -5
  28. package/browser/index.d.ts.map +1 -0
  29. package/browser/index.js +12477 -101
  30. package/browser/io/BinaryReader.d.ts +276 -0
  31. package/browser/io/BinaryReader.d.ts.map +1 -0
  32. package/browser/io/BinaryWriter.d.ts +391 -0
  33. package/browser/io/BinaryWriter.d.ts.map +1 -0
  34. package/browser/io/MemoryPool.d.ts +220 -0
  35. package/browser/io/MemoryPool.d.ts.map +1 -0
  36. package/browser/io/base64.d.ts +13 -0
  37. package/browser/io/base64.d.ts.map +1 -0
  38. package/browser/io/hex.d.ts +67 -0
  39. package/browser/io/hex.d.ts.map +1 -0
  40. package/browser/io/index.d.ts +17 -0
  41. package/browser/io/index.d.ts.map +1 -0
  42. package/browser/io/utils.d.ts +199 -0
  43. package/browser/io/utils.d.ts.map +1 -0
  44. package/browser/merkle.d.ts +10 -1
  45. package/browser/merkle.d.ts.map +1 -0
  46. package/browser/networks.d.ts +70 -9
  47. package/browser/networks.d.ts.map +1 -0
  48. package/browser/opcodes.d.ts +1 -0
  49. package/browser/opcodes.d.ts.map +1 -0
  50. package/browser/payments/bip341.d.ts +35 -9
  51. package/browser/payments/bip341.d.ts.map +1 -0
  52. package/browser/payments/embed.d.ts +112 -1
  53. package/browser/payments/embed.d.ts.map +1 -0
  54. package/browser/payments/index.d.ts +17 -10
  55. package/browser/payments/index.d.ts.map +1 -0
  56. package/browser/payments/p2ms.d.ts +150 -0
  57. package/browser/payments/p2ms.d.ts.map +1 -0
  58. package/browser/payments/p2op.d.ts +150 -24
  59. package/browser/payments/p2op.d.ts.map +1 -0
  60. package/browser/payments/p2pk.d.ts +154 -1
  61. package/browser/payments/p2pk.d.ts.map +1 -0
  62. package/browser/payments/p2pkh.d.ts +176 -1
  63. package/browser/payments/p2pkh.d.ts.map +1 -0
  64. package/browser/payments/p2sh.d.ts +150 -1
  65. package/browser/payments/p2sh.d.ts.map +1 -0
  66. package/browser/payments/p2tr.d.ts +185 -1
  67. package/browser/payments/p2tr.d.ts.map +1 -0
  68. package/browser/payments/p2wpkh.d.ts +161 -1
  69. package/browser/payments/p2wpkh.d.ts.map +1 -0
  70. package/browser/payments/p2wsh.d.ts +146 -1
  71. package/browser/payments/p2wsh.d.ts.map +1 -0
  72. package/browser/payments/types.d.ts +94 -64
  73. package/browser/payments/types.d.ts.map +1 -0
  74. package/browser/psbt/bip371.d.ts +34 -8
  75. package/browser/psbt/bip371.d.ts.map +1 -0
  76. package/browser/psbt/psbtutils.d.ts +56 -16
  77. package/browser/psbt/psbtutils.d.ts.map +1 -0
  78. package/browser/psbt/types.d.ts +245 -0
  79. package/browser/psbt/types.d.ts.map +1 -0
  80. package/browser/psbt/utils.d.ts +64 -0
  81. package/browser/psbt/utils.d.ts.map +1 -0
  82. package/browser/psbt/validation.d.ts +84 -0
  83. package/browser/psbt/validation.d.ts.map +1 -0
  84. package/browser/psbt.d.ts +82 -118
  85. package/browser/psbt.d.ts.map +1 -0
  86. package/browser/pubkey.d.ts +27 -6
  87. package/browser/pubkey.d.ts.map +1 -0
  88. package/browser/push_data.d.ts +24 -2
  89. package/browser/push_data.d.ts.map +1 -0
  90. package/browser/script.d.ts +33 -8
  91. package/browser/script.d.ts.map +1 -0
  92. package/browser/script_number.d.ts +17 -0
  93. package/browser/script_number.d.ts.map +1 -0
  94. package/browser/script_signature.d.ts +23 -5
  95. package/browser/script_signature.d.ts.map +1 -0
  96. package/browser/transaction.d.ts +160 -18
  97. package/browser/transaction.d.ts.map +1 -0
  98. package/browser/types.d.ts +36 -38
  99. package/browser/types.d.ts.map +1 -0
  100. package/browser/workers/WorkerSigningPool.d.ts +143 -0
  101. package/browser/workers/WorkerSigningPool.d.ts.map +1 -0
  102. package/browser/workers/WorkerSigningPool.node.d.ts +116 -0
  103. package/browser/workers/WorkerSigningPool.node.d.ts.map +1 -0
  104. package/browser/workers/ecc-bundle.d.ts +25 -0
  105. package/browser/workers/ecc-bundle.d.ts.map +1 -0
  106. package/browser/workers/index.d.ts +91 -0
  107. package/browser/workers/index.d.ts.map +1 -0
  108. package/browser/workers/psbt-parallel.d.ts +88 -0
  109. package/browser/workers/psbt-parallel.d.ts.map +1 -0
  110. package/browser/workers/signing-worker.d.ts +37 -0
  111. package/browser/workers/signing-worker.d.ts.map +1 -0
  112. package/browser/workers/types.d.ts +365 -0
  113. package/browser/workers/types.d.ts.map +1 -0
  114. package/build/address.d.ts +58 -11
  115. package/build/address.d.ts.map +1 -0
  116. package/build/address.js +82 -25
  117. package/build/address.js.map +1 -0
  118. package/build/bech32utils.d.ts +9 -1
  119. package/build/bech32utils.d.ts.map +1 -0
  120. package/build/bech32utils.js +10 -2
  121. package/build/bech32utils.js.map +1 -0
  122. package/build/bip66.d.ts +11 -6
  123. package/build/bip66.d.ts.map +1 -0
  124. package/build/bip66.js +32 -3
  125. package/build/bip66.js.map +1 -0
  126. package/build/block.d.ts +117 -11
  127. package/build/block.d.ts.map +1 -0
  128. package/build/block.js +202 -72
  129. package/build/block.js.map +1 -0
  130. package/build/branded.d.ts +20 -0
  131. package/build/branded.d.ts.map +1 -0
  132. package/build/branded.js +7 -0
  133. package/build/branded.js.map +1 -0
  134. package/build/crypto/crypto.d.ts +1 -0
  135. package/build/crypto/crypto.d.ts.map +1 -0
  136. package/build/crypto/crypto.js +1 -0
  137. package/build/crypto/crypto.js.map +1 -0
  138. package/build/crypto.d.ts +46 -7
  139. package/build/crypto.d.ts.map +1 -0
  140. package/build/crypto.js +65 -20
  141. package/build/crypto.js.map +1 -0
  142. package/build/ecc/context.d.ts +135 -0
  143. package/build/ecc/context.d.ts.map +1 -0
  144. package/build/ecc/context.js +232 -0
  145. package/build/ecc/context.js.map +1 -0
  146. package/build/ecc/index.d.ts +11 -0
  147. package/build/ecc/index.d.ts.map +1 -0
  148. package/build/ecc/index.js +11 -0
  149. package/build/ecc/index.js.map +1 -0
  150. package/build/ecc/types.d.ts +134 -0
  151. package/build/ecc/types.d.ts.map +1 -0
  152. package/build/ecc/types.js +8 -0
  153. package/build/ecc/types.js.map +1 -0
  154. package/build/errors.d.ts +124 -0
  155. package/build/errors.d.ts.map +1 -0
  156. package/build/errors.js +155 -0
  157. package/build/errors.js.map +1 -0
  158. package/build/index.d.ts +32 -5
  159. package/build/index.d.ts.map +1 -0
  160. package/build/index.js +26 -3
  161. package/build/index.js.map +1 -0
  162. package/build/io/BinaryReader.d.ts +276 -0
  163. package/build/io/BinaryReader.d.ts.map +1 -0
  164. package/build/io/BinaryReader.js +425 -0
  165. package/build/io/BinaryReader.js.map +1 -0
  166. package/build/io/BinaryWriter.d.ts +391 -0
  167. package/build/io/BinaryWriter.d.ts.map +1 -0
  168. package/build/io/BinaryWriter.js +611 -0
  169. package/build/io/BinaryWriter.js.map +1 -0
  170. package/build/io/MemoryPool.d.ts +220 -0
  171. package/build/io/MemoryPool.d.ts.map +1 -0
  172. package/build/io/MemoryPool.js +309 -0
  173. package/build/io/MemoryPool.js.map +1 -0
  174. package/build/io/base64.d.ts +13 -0
  175. package/build/io/base64.d.ts.map +1 -0
  176. package/build/io/base64.js +20 -0
  177. package/build/io/base64.js.map +1 -0
  178. package/build/io/hex.d.ts +67 -0
  179. package/build/io/hex.d.ts.map +1 -0
  180. package/build/io/hex.js +138 -0
  181. package/build/io/hex.js.map +1 -0
  182. package/build/io/index.d.ts +17 -0
  183. package/build/io/index.d.ts.map +1 -0
  184. package/build/io/index.js +23 -0
  185. package/build/io/index.js.map +1 -0
  186. package/build/io/utils.d.ts +199 -0
  187. package/build/io/utils.d.ts.map +1 -0
  188. package/build/io/utils.js +271 -0
  189. package/build/io/utils.js.map +1 -0
  190. package/build/merkle.d.ts +10 -1
  191. package/build/merkle.d.ts.map +1 -0
  192. package/build/merkle.js +12 -1
  193. package/build/merkle.js.map +1 -0
  194. package/build/networks.d.ts +70 -9
  195. package/build/networks.d.ts.map +1 -0
  196. package/build/networks.js +90 -4
  197. package/build/networks.js.map +1 -0
  198. package/build/opcodes.d.ts +1 -0
  199. package/build/opcodes.d.ts.map +1 -0
  200. package/build/opcodes.js +1 -0
  201. package/build/opcodes.js.map +1 -0
  202. package/build/payments/bip341.d.ts +35 -9
  203. package/build/payments/bip341.d.ts.map +1 -0
  204. package/build/payments/bip341.js +34 -15
  205. package/build/payments/bip341.js.map +1 -0
  206. package/build/payments/embed.d.ts +120 -1
  207. package/build/payments/embed.d.ts.map +1 -0
  208. package/build/payments/embed.js +215 -34
  209. package/build/payments/embed.js.map +1 -0
  210. package/build/payments/index.d.ts +17 -10
  211. package/build/payments/index.d.ts.map +1 -0
  212. package/build/payments/index.js +20 -10
  213. package/build/payments/index.js.map +1 -0
  214. package/build/payments/p2ms.d.ts +159 -1
  215. package/build/payments/p2ms.d.ts.map +1 -0
  216. package/build/payments/p2ms.js +427 -108
  217. package/build/payments/p2ms.js.map +1 -0
  218. package/build/payments/p2op.d.ts +158 -24
  219. package/build/payments/p2op.d.ts.map +1 -0
  220. package/build/payments/p2op.js +379 -93
  221. package/build/payments/p2op.js.map +1 -0
  222. package/build/payments/p2pk.d.ts +162 -1
  223. package/build/payments/p2pk.d.ts.map +1 -0
  224. package/build/payments/p2pk.js +327 -58
  225. package/build/payments/p2pk.js.map +1 -0
  226. package/build/payments/p2pkh.d.ts +185 -1
  227. package/build/payments/p2pkh.d.ts.map +1 -0
  228. package/build/payments/p2pkh.js +467 -114
  229. package/build/payments/p2pkh.js.map +1 -0
  230. package/build/payments/p2sh.d.ts +159 -1
  231. package/build/payments/p2sh.d.ts.map +1 -0
  232. package/build/payments/p2sh.js +500 -150
  233. package/build/payments/p2sh.js.map +1 -0
  234. package/build/payments/p2tr.d.ts +193 -1
  235. package/build/payments/p2tr.d.ts.map +1 -0
  236. package/build/payments/p2tr.js +592 -174
  237. package/build/payments/p2tr.js.map +1 -0
  238. package/build/payments/p2wpkh.d.ts +170 -1
  239. package/build/payments/p2wpkh.d.ts.map +1 -0
  240. package/build/payments/p2wpkh.js +428 -103
  241. package/build/payments/p2wpkh.js.map +1 -0
  242. package/build/payments/p2wsh.d.ts +155 -1
  243. package/build/payments/p2wsh.d.ts.map +1 -0
  244. package/build/payments/p2wsh.js +465 -143
  245. package/build/payments/p2wsh.js.map +1 -0
  246. package/build/payments/types.d.ts +98 -64
  247. package/build/payments/types.d.ts.map +1 -0
  248. package/build/payments/types.js +17 -13
  249. package/build/payments/types.js.map +1 -0
  250. package/build/psbt/bip371.d.ts +35 -9
  251. package/build/psbt/bip371.d.ts.map +1 -0
  252. package/build/psbt/bip371.js +117 -28
  253. package/build/psbt/bip371.js.map +1 -0
  254. package/build/psbt/psbtutils.d.ts +56 -16
  255. package/build/psbt/psbtutils.d.ts.map +1 -0
  256. package/build/psbt/psbtutils.js +71 -16
  257. package/build/psbt/psbtutils.js.map +1 -0
  258. package/build/psbt/types.d.ts +249 -0
  259. package/build/psbt/types.d.ts.map +1 -0
  260. package/build/psbt/types.js +6 -0
  261. package/build/psbt/types.js.map +1 -0
  262. package/build/psbt/utils.d.ts +68 -0
  263. package/build/psbt/utils.d.ts.map +1 -0
  264. package/build/psbt/utils.js +171 -0
  265. package/build/psbt/utils.js.map +1 -0
  266. package/build/psbt/validation.d.ts +88 -0
  267. package/build/psbt/validation.d.ts.map +1 -0
  268. package/build/psbt/validation.js +149 -0
  269. package/build/psbt/validation.js.map +1 -0
  270. package/build/psbt.d.ts +84 -120
  271. package/build/psbt.d.ts.map +1 -0
  272. package/build/psbt.js +406 -413
  273. package/build/psbt.js.map +1 -0
  274. package/build/pubkey.d.ts +27 -6
  275. package/build/pubkey.d.ts.map +1 -0
  276. package/build/pubkey.js +36 -12
  277. package/build/pubkey.js.map +1 -0
  278. package/build/push_data.d.ts +24 -2
  279. package/build/push_data.d.ts.map +1 -0
  280. package/build/push_data.js +44 -12
  281. package/build/push_data.js.map +1 -0
  282. package/build/script.d.ts +33 -8
  283. package/build/script.d.ts.map +1 -0
  284. package/build/script.js +101 -37
  285. package/build/script.js.map +1 -0
  286. package/build/script_number.d.ts +17 -0
  287. package/build/script_number.d.ts.map +1 -0
  288. package/build/script_number.js +19 -0
  289. package/build/script_number.js.map +1 -0
  290. package/build/script_signature.d.ts +23 -5
  291. package/build/script_signature.d.ts.map +1 -0
  292. package/build/script_signature.js +48 -15
  293. package/build/script_signature.js.map +1 -0
  294. package/build/transaction.d.ts +160 -18
  295. package/build/transaction.d.ts.map +1 -0
  296. package/build/transaction.js +443 -176
  297. package/build/transaction.js.map +1 -0
  298. package/build/tsconfig.build.tsbuildinfo +1 -0
  299. package/build/types.d.ts +36 -38
  300. package/build/types.d.ts.map +1 -0
  301. package/build/types.js +169 -57
  302. package/build/types.js.map +1 -0
  303. package/build/workers/WorkerSigningPool.d.ts +174 -0
  304. package/build/workers/WorkerSigningPool.d.ts.map +1 -0
  305. package/build/workers/WorkerSigningPool.js +553 -0
  306. package/build/workers/WorkerSigningPool.js.map +1 -0
  307. package/build/workers/WorkerSigningPool.node.d.ts +124 -0
  308. package/build/workers/WorkerSigningPool.node.d.ts.map +1 -0
  309. package/build/workers/WorkerSigningPool.node.js +753 -0
  310. package/build/workers/WorkerSigningPool.node.js.map +1 -0
  311. package/build/workers/ecc-bundle.d.ts +25 -0
  312. package/build/workers/ecc-bundle.d.ts.map +1 -0
  313. package/build/workers/ecc-bundle.js +25 -0
  314. package/build/workers/ecc-bundle.js.map +1 -0
  315. package/build/workers/index.d.ts +91 -0
  316. package/build/workers/index.d.ts.map +1 -0
  317. package/build/workers/index.js +114 -0
  318. package/build/workers/index.js.map +1 -0
  319. package/build/workers/psbt-parallel.d.ts +117 -0
  320. package/build/workers/psbt-parallel.d.ts.map +1 -0
  321. package/build/workers/psbt-parallel.js +233 -0
  322. package/build/workers/psbt-parallel.js.map +1 -0
  323. package/build/workers/signing-worker.d.ts +37 -0
  324. package/build/workers/signing-worker.d.ts.map +1 -0
  325. package/build/workers/signing-worker.js +350 -0
  326. package/build/workers/signing-worker.js.map +1 -0
  327. package/build/workers/types.d.ts +365 -0
  328. package/build/workers/types.d.ts.map +1 -0
  329. package/build/workers/types.js +60 -0
  330. package/build/workers/types.js.map +1 -0
  331. package/package.json +68 -9
  332. package/scripts/bundle-ecc.ts +111 -0
  333. package/src/address.ts +91 -45
  334. package/src/bech32utils.ts +3 -3
  335. package/src/bip66.ts +34 -24
  336. package/src/block.ts +205 -86
  337. package/src/branded.ts +18 -0
  338. package/src/crypto.ts +64 -26
  339. package/src/ecc/context.ts +280 -0
  340. package/src/ecc/index.ts +14 -0
  341. package/src/ecc/types.ts +147 -0
  342. package/src/ecpair.d.ts +99 -0
  343. package/src/errors.ts +163 -0
  344. package/src/index.ts +112 -9
  345. package/src/io/BinaryReader.ts +461 -0
  346. package/src/io/BinaryWriter.ts +696 -0
  347. package/src/io/MemoryPool.ts +343 -0
  348. package/src/io/base64.ts +20 -0
  349. package/src/io/hex.ts +155 -0
  350. package/src/io/index.ts +41 -0
  351. package/src/io/utils.ts +283 -0
  352. package/src/merkle.ts +14 -9
  353. package/src/networks.ts +9 -9
  354. package/src/payments/bip341.ts +32 -33
  355. package/src/payments/embed.ts +244 -41
  356. package/src/payments/index.ts +12 -10
  357. package/src/payments/p2ms.ts +497 -118
  358. package/src/payments/p2op.ts +432 -134
  359. package/src/payments/p2pk.ts +370 -72
  360. package/src/payments/p2pkh.ts +524 -130
  361. package/src/payments/p2sh.ts +572 -169
  362. package/src/payments/p2tr.ts +686 -194
  363. package/src/payments/p2wpkh.ts +482 -105
  364. package/src/payments/p2wsh.ts +524 -162
  365. package/src/payments/types.ts +80 -66
  366. package/src/psbt/bip371.ts +72 -51
  367. package/src/psbt/psbtutils.ts +39 -40
  368. package/src/psbt/types.ts +324 -0
  369. package/src/psbt/utils.ts +188 -0
  370. package/src/psbt/validation.ts +185 -0
  371. package/src/psbt.ts +608 -827
  372. package/src/pubkey.ts +22 -23
  373. package/src/push_data.ts +18 -16
  374. package/src/script.ts +81 -66
  375. package/src/script_number.ts +6 -6
  376. package/src/script_signature.ts +33 -36
  377. package/src/transaction.ts +462 -239
  378. package/src/types.ts +229 -100
  379. package/src/workers/WorkerSigningPool.node.ts +887 -0
  380. package/src/workers/WorkerSigningPool.ts +666 -0
  381. package/src/workers/ecc-bundle.ts +26 -0
  382. package/src/workers/index.ts +165 -0
  383. package/src/workers/psbt-parallel.ts +327 -0
  384. package/src/workers/signing-worker.ts +353 -0
  385. package/src/workers/types.ts +417 -0
  386. package/test/address.spec.ts +9 -6
  387. package/test/bitcoin.core.spec.ts +16 -17
  388. package/test/block.spec.ts +8 -7
  389. package/test/bufferutils.spec.ts +228 -214
  390. package/test/crypto.spec.ts +19 -11
  391. package/test/fixtures/p2pk.json +0 -8
  392. package/test/fixtures/p2pkh.json +1 -1
  393. package/test/fixtures/p2sh.json +1 -1
  394. package/test/fixtures/script.json +1 -1
  395. package/test/fixtures/transaction.json +2 -2
  396. package/test/integration/_regtest.ts +25 -0
  397. package/test/integration/addresses.spec.ts +4 -3
  398. package/test/integration/bip32.spec.ts +2 -1
  399. package/test/integration/blocks.spec.ts +1 -1
  400. package/test/integration/cltv.spec.ts +18 -16
  401. package/test/integration/csv.spec.ts +37 -64
  402. package/test/integration/payments.spec.ts +5 -3
  403. package/test/integration/taproot.spec.ts +76 -83
  404. package/test/integration/transactions.spec.ts +38 -35
  405. package/test/payments.spec.ts +35 -13
  406. package/test/payments.utils.ts +17 -16
  407. package/test/psbt.spec.ts +111 -100
  408. package/test/script.spec.ts +11 -10
  409. package/test/script_signature.spec.ts +9 -11
  410. package/test/taproot-cache.spec.ts +694 -0
  411. package/test/transaction.spec.ts +32 -40
  412. package/test/types.spec.ts +74 -29
  413. package/test/workers-pool.spec.ts +963 -0
  414. package/test/workers-signing.spec.ts +635 -0
  415. package/test/workers.spec.ts +1390 -0
  416. package/tsconfig.base.json +34 -18
  417. package/tsconfig.browser.json +15 -0
  418. package/tsconfig.build.json +5 -0
  419. package/tsconfig.json +5 -14
  420. package/typedoc.json +29 -0
  421. package/vite.config.browser.ts +3 -42
  422. package/vitest.config.integration.ts +2 -0
  423. package/browser/bufferutils.d.ts +0 -34
  424. package/browser/chunks/crypto-BhCpKpek.js +0 -2033
  425. package/browser/chunks/payments-B1wlSccx.js +0 -1089
  426. package/browser/chunks/psbt-BCNk7JUx.js +0 -4055
  427. package/browser/chunks/script-DyPItFEl.js +0 -318
  428. package/browser/chunks/transaction-C_UbhMGn.js +0 -432
  429. package/browser/chunks/utils-DNZi-T5W.js +0 -761
  430. package/browser/ecc_lib.d.ts +0 -3
  431. package/browser/hooks/AdvancedSignatureManager.d.ts +0 -16
  432. package/browser/hooks/HookedSigner.d.ts +0 -4
  433. package/browser/hooks/SignatureManager.d.ts +0 -13
  434. package/browser/payments/lazy.d.ts +0 -2
  435. package/browser/typeforce.d.ts +0 -38
  436. package/build/bufferutils.d.ts +0 -34
  437. package/build/bufferutils.js +0 -141
  438. package/build/ecc_lib.d.ts +0 -3
  439. package/build/ecc_lib.js +0 -61
  440. package/build/hooks/AdvancedSignatureManager.d.ts +0 -16
  441. package/build/hooks/AdvancedSignatureManager.js +0 -52
  442. package/build/hooks/HookedSigner.d.ts +0 -4
  443. package/build/hooks/HookedSigner.js +0 -64
  444. package/build/hooks/SignatureManager.d.ts +0 -13
  445. package/build/hooks/SignatureManager.js +0 -45
  446. package/build/payments/lazy.d.ts +0 -2
  447. package/build/payments/lazy.js +0 -28
  448. package/build/tsconfig.tsbuildinfo +0 -1
  449. package/src/bufferutils.ts +0 -188
  450. package/src/ecc_lib.ts +0 -94
  451. package/src/hooks/AdvancedSignatureManager.ts +0 -104
  452. package/src/hooks/HookedSigner.ts +0 -108
  453. package/src/hooks/SignatureManager.ts +0 -84
  454. package/src/payments/lazy.ts +0 -28
  455. package/src/typeforce.d.ts +0 -38
  456. package/tsconfig.webpack.json +0 -18
@@ -1,34 +1,31 @@
1
1
  import assert from 'assert';
2
2
  import { describe, it } from 'vitest';
3
- import * as bufferutils from '../src/bufferutils.js';
4
- import { BufferReader, BufferWriter } from '../src/bufferutils.js';
3
+ import { BinaryReader, BinaryWriter, fromHex, toHex } from '../src/io/index.js';
5
4
 
6
5
  import fixtures from './fixtures/bufferutils.json' with { type: 'json' };
7
6
 
8
7
  import * as varuint from 'varuint-bitcoin';
9
8
 
10
- describe('bufferutils', () => {
11
- function concatToBuffer(values: number[][]): Buffer {
12
- return Buffer.concat(values.map((data) => Buffer.from(data)));
9
+ describe('BinaryReader/BinaryWriter', () => {
10
+ function concatToBuffer(values: number[][]): Uint8Array {
11
+ const totalLength = values.reduce((sum, arr) => sum + arr.length, 0);
12
+ const result = new Uint8Array(totalLength);
13
+ let offset = 0;
14
+ for (const arr of values) {
15
+ result.set(arr, offset);
16
+ offset += arr.length;
17
+ }
18
+ return result;
13
19
  }
14
20
 
15
21
  describe('readUInt64LE', () => {
16
22
  fixtures.valid.forEach((f) => {
17
23
  it('decodes ' + f.hex, () => {
18
- const buffer = Buffer.from(f.hex, 'hex');
19
- const num = bufferutils.readUInt64LE(buffer, 0);
24
+ const data = fromHex(f.hex);
25
+ const reader = new BinaryReader(data);
26
+ const num = reader.readUInt64LE();
20
27
 
21
- assert.strictEqual(num, f.dec);
22
- });
23
- });
24
-
25
- fixtures.invalid.readUInt64LE.forEach((f) => {
26
- it('throws on ' + f.description, () => {
27
- const buffer = Buffer.from(f.hex, 'hex');
28
-
29
- assert.throws(() => {
30
- bufferutils.readUInt64LE(buffer, 0);
31
- }, new RegExp(f.exception));
28
+ assert.strictEqual(Number(num), f.dec);
32
29
  });
33
30
  });
34
31
  });
@@ -36,59 +33,48 @@ describe('bufferutils', () => {
36
33
  describe('writeUInt64LE', () => {
37
34
  fixtures.valid.forEach((f) => {
38
35
  it('encodes ' + f.dec, () => {
39
- const buffer = Buffer.alloc(8, 0);
40
-
41
- bufferutils.writeUInt64LE(buffer, f.dec, 0);
42
- assert.strictEqual(buffer.toString('hex'), f.hex);
43
- });
44
- });
45
-
46
- fixtures.invalid.writeUInt64LE.forEach((f) => {
47
- it('throws on ' + f.description, () => {
48
- const buffer = Buffer.alloc(8, 0);
49
-
50
- assert.throws(() => {
51
- bufferutils.writeUInt64LE(buffer, f.dec, 0);
52
- }, new RegExp(f.exception));
36
+ const writer = new BinaryWriter(8);
37
+ writer.writeUInt64LE(BigInt(f.dec));
38
+ assert.strictEqual(toHex(writer.finish()), f.hex);
53
39
  });
54
40
  });
55
41
  });
56
42
 
57
- describe('BufferWriter', () => {
43
+ describe('BinaryWriter', () => {
58
44
  function testBuffer(
59
- bufferWriter: BufferWriter,
60
- expectedBuffer: Buffer,
61
- expectedOffset: number = expectedBuffer.length,
45
+ writer: BinaryWriter,
46
+ expectedData: Uint8Array,
47
+ expectedOffset: number = expectedData.length,
62
48
  ): void {
63
- assert.strictEqual(bufferWriter.offset, expectedOffset);
49
+ assert.strictEqual(writer.offset, expectedOffset);
64
50
  assert.deepStrictEqual(
65
- bufferWriter.buffer.slice(0, expectedOffset),
66
- expectedBuffer.slice(0, expectedOffset),
51
+ writer.data.slice(0, expectedOffset),
52
+ expectedData.slice(0, expectedOffset),
67
53
  );
68
54
  }
69
55
 
70
- it('withCapacity', () => {
71
- const expectedBuffer = Buffer.from('04030201', 'hex');
72
- const withCapacity = BufferWriter.withCapacity(4);
73
- withCapacity.writeInt32(0x01020304);
74
- testBuffer(withCapacity, expectedBuffer);
56
+ it('constructor with size', () => {
57
+ const expectedData = fromHex('04030201');
58
+ const writer = new BinaryWriter(4);
59
+ writer.writeInt32LE(0x01020304);
60
+ testBuffer(writer, expectedData);
75
61
  });
76
62
 
77
- it('writeUint8', () => {
63
+ it('writeUInt8', () => {
78
64
  const values = [0, 1, 254, 255];
79
- const expectedBuffer = Buffer.from([0, 1, 0xfe, 0xff]);
80
- const bufferWriter = new BufferWriter(Buffer.allocUnsafe(expectedBuffer.length));
65
+ const expectedData = new Uint8Array([0, 1, 0xfe, 0xff]);
66
+ const writer = new BinaryWriter(expectedData.length);
81
67
  values.forEach((v: number) => {
82
- const expectedOffset = bufferWriter.offset + 1;
83
- bufferWriter.writeUInt8(v);
84
- testBuffer(bufferWriter, expectedBuffer, expectedOffset);
68
+ const expectedOffset = writer.offset + 1;
69
+ writer.writeUInt8(v);
70
+ testBuffer(writer, expectedData, expectedOffset);
85
71
  });
86
- testBuffer(bufferWriter, expectedBuffer);
72
+ testBuffer(writer, expectedData);
87
73
  });
88
74
 
89
- it('writeInt32', () => {
75
+ it('writeInt32LE', () => {
90
76
  const values = [0, 1, Math.pow(2, 31) - 2, Math.pow(2, 31) - 1, -1, -Math.pow(2, 31)];
91
- const expectedBuffer = concatToBuffer([
77
+ const expectedData = concatToBuffer([
92
78
  [0, 0, 0, 0],
93
79
  [1, 0, 0, 0],
94
80
  [0xfe, 0xff, 0xff, 0x7f],
@@ -96,48 +82,48 @@ describe('bufferutils', () => {
96
82
  [0xff, 0xff, 0xff, 0xff],
97
83
  [0x00, 0x00, 0x00, 0x80],
98
84
  ]);
99
- const bufferWriter = new BufferWriter(Buffer.allocUnsafe(expectedBuffer.length));
85
+ const writer = new BinaryWriter(expectedData.length);
100
86
  values.forEach((value: number) => {
101
- const expectedOffset = bufferWriter.offset + 4;
102
- bufferWriter.writeInt32(value);
103
- testBuffer(bufferWriter, expectedBuffer, expectedOffset);
87
+ const expectedOffset = writer.offset + 4;
88
+ writer.writeInt32LE(value);
89
+ testBuffer(writer, expectedData, expectedOffset);
104
90
  });
105
- testBuffer(bufferWriter, expectedBuffer);
91
+ testBuffer(writer, expectedData);
106
92
  });
107
93
 
108
- it('writeUInt32', () => {
94
+ it('writeUInt32LE', () => {
109
95
  const maxUInt32 = Math.pow(2, 32) - 1;
110
96
  const values = [0, 1, Math.pow(2, 16), maxUInt32];
111
- const expectedBuffer = concatToBuffer([
97
+ const expectedData = concatToBuffer([
112
98
  [0, 0, 0, 0],
113
99
  [1, 0, 0, 0],
114
100
  [0, 0, 1, 0],
115
101
  [0xff, 0xff, 0xff, 0xff],
116
102
  ]);
117
- const bufferWriter = new BufferWriter(Buffer.allocUnsafe(expectedBuffer.length));
103
+ const writer = new BinaryWriter(expectedData.length);
118
104
  values.forEach((value: number) => {
119
- const expectedOffset = bufferWriter.offset + 4;
120
- bufferWriter.writeUInt32(value);
121
- testBuffer(bufferWriter, expectedBuffer, expectedOffset);
105
+ const expectedOffset = writer.offset + 4;
106
+ writer.writeUInt32LE(value);
107
+ testBuffer(writer, expectedData, expectedOffset);
122
108
  });
123
- testBuffer(bufferWriter, expectedBuffer);
109
+ testBuffer(writer, expectedData);
124
110
  });
125
111
 
126
- it('writeUInt64', () => {
127
- const values = [0, 1, Math.pow(2, 32), Number.MAX_SAFE_INTEGER /* 2^53 - 1 */];
128
- const expectedBuffer = concatToBuffer([
112
+ it('writeUInt64LE', () => {
113
+ const values = [0n, 1n, BigInt(Math.pow(2, 32)), BigInt(Number.MAX_SAFE_INTEGER)];
114
+ const expectedData = concatToBuffer([
129
115
  [0, 0, 0, 0, 0, 0, 0, 0],
130
116
  [1, 0, 0, 0, 0, 0, 0, 0],
131
117
  [0, 0, 0, 0, 1, 0, 0, 0],
132
118
  [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00],
133
119
  ]);
134
- const bufferWriter = new BufferWriter(Buffer.allocUnsafe(expectedBuffer.length));
135
- values.forEach((value: number) => {
136
- const expectedOffset = bufferWriter.offset + 8;
137
- bufferWriter.writeUInt64(value);
138
- testBuffer(bufferWriter, expectedBuffer, expectedOffset);
120
+ const writer = new BinaryWriter(expectedData.length);
121
+ values.forEach((value: bigint) => {
122
+ const expectedOffset = writer.offset + 8;
123
+ writer.writeUInt64LE(value);
124
+ testBuffer(writer, expectedData, expectedOffset);
139
125
  });
140
- testBuffer(bufferWriter, expectedBuffer);
126
+ testBuffer(writer, expectedData);
141
127
  });
142
128
 
143
129
  it('writeVarInt', () => {
@@ -157,7 +143,7 @@ describe('bufferutils', () => {
157
143
  Math.pow(2, 32),
158
144
  Number.MAX_SAFE_INTEGER,
159
145
  ];
160
- const expectedBuffer = concatToBuffer([
146
+ const expectedData = concatToBuffer([
161
147
  [0x00],
162
148
  [0x01],
163
149
  [0xfc],
@@ -173,126 +159,138 @@ describe('bufferutils', () => {
173
159
  [0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00],
174
160
  [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00],
175
161
  ]);
176
- const bufferWriter = new BufferWriter(Buffer.allocUnsafe(expectedBuffer.length));
162
+ const writer = new BinaryWriter(expectedData.length);
177
163
  values.forEach((value: number) => {
178
- const expectedOffset = bufferWriter.offset + varuint.encodingLength(value);
179
- bufferWriter.writeVarInt(value);
180
- testBuffer(bufferWriter, expectedBuffer, expectedOffset);
164
+ const expectedOffset = writer.offset + varuint.encodingLength(value);
165
+ writer.writeVarInt(value);
166
+ testBuffer(writer, expectedData, expectedOffset);
181
167
  });
182
- testBuffer(bufferWriter, expectedBuffer);
168
+ testBuffer(writer, expectedData);
183
169
  });
184
170
 
185
- it('writeSlice', () => {
171
+ it('writeBytes', () => {
186
172
  const values = [[], [1], [1, 2, 3, 4], [254, 255]];
187
- const expectedBuffer = concatToBuffer(values);
188
- const bufferWriter = new BufferWriter(Buffer.allocUnsafe(expectedBuffer.length));
173
+ const expectedData = concatToBuffer(values);
174
+ const writer = new BinaryWriter(expectedData.length);
189
175
  values.forEach((v: number[]) => {
190
- const expectedOffset = bufferWriter.offset + v.length;
191
- bufferWriter.writeSlice(Buffer.from(v));
192
- testBuffer(bufferWriter, expectedBuffer, expectedOffset);
176
+ const expectedOffset = writer.offset + v.length;
177
+ writer.writeBytes(new Uint8Array(v));
178
+ testBuffer(writer, expectedData, expectedOffset);
193
179
  });
194
- testBuffer(bufferWriter, expectedBuffer);
180
+ testBuffer(writer, expectedData);
195
181
  assert.throws(() => {
196
- bufferWriter.writeSlice(Buffer.from([0, 0]));
197
- }, /^Error: Cannot write slice out of bounds$/);
182
+ writer.writeBytes(new Uint8Array([0, 0]));
183
+ }, /out of bounds|Cannot write|Write past end/);
198
184
  });
199
185
 
200
- it('writeVarSlice', () => {
201
- const values = [Buffer.alloc(1, 1), Buffer.alloc(252, 2), Buffer.alloc(253, 3)];
202
- const expectedBuffer = Buffer.concat([
203
- Buffer.from([0x01, 0x01]),
204
- Buffer.from([0xfc]),
205
- Buffer.alloc(252, 0x02),
206
- Buffer.from([0xfd, 0xfd, 0x00]),
207
- Buffer.alloc(253, 0x03),
208
- ]);
209
- const bufferWriter = new BufferWriter(Buffer.allocUnsafe(expectedBuffer.length));
210
- values.forEach((value: Buffer) => {
186
+ it('writeVarBytes', () => {
187
+ const values = [
188
+ new Uint8Array(1).fill(1),
189
+ new Uint8Array(252).fill(2),
190
+ new Uint8Array(253).fill(3),
191
+ ];
192
+ const part1 = new Uint8Array([0x01, 0x01]);
193
+ const part2 = new Uint8Array([0xfc, ...new Array(252).fill(0x02)]);
194
+ const part3 = new Uint8Array([0xfd, 0xfd, 0x00, ...new Array(253).fill(0x03)]);
195
+ const expectedData = new Uint8Array(part1.length + part2.length + part3.length);
196
+ expectedData.set(part1, 0);
197
+ expectedData.set(part2, part1.length);
198
+ expectedData.set(part3, part1.length + part2.length);
199
+
200
+ const writer = new BinaryWriter(expectedData.length);
201
+ values.forEach((value: Uint8Array) => {
211
202
  const expectedOffset =
212
- bufferWriter.offset + varuint.encodingLength(value.length) + value.length;
213
- bufferWriter.writeVarSlice(value);
214
- testBuffer(bufferWriter, expectedBuffer, expectedOffset);
203
+ writer.offset + varuint.encodingLength(value.length) + value.length;
204
+ writer.writeVarBytes(value);
205
+ testBuffer(writer, expectedData, expectedOffset);
215
206
  });
216
- testBuffer(bufferWriter, expectedBuffer);
207
+ testBuffer(writer, expectedData);
217
208
  });
218
209
 
219
210
  it('writeVector', () => {
220
211
  const values = [
221
- [Buffer.alloc(1, 4), Buffer.alloc(253, 5)],
222
- Array(253).fill(Buffer.alloc(1, 6)),
212
+ [new Uint8Array(1).fill(4), new Uint8Array(253).fill(5)],
213
+ Array(253).fill(new Uint8Array(1).fill(6)),
223
214
  ];
224
- const expectedBuffer = Buffer.concat([
225
- Buffer.from([0x02]),
226
- Buffer.from([0x01, 0x04]),
227
- Buffer.from([0xfd, 0xfd, 0x00]),
228
- Buffer.alloc(253, 5),
229
-
230
- Buffer.from([0xfd, 0xfd, 0x00]),
231
- Buffer.concat(
232
- Array(253)
233
- .fill(0)
234
- .map(() => Buffer.from([0x01, 0x06])),
235
- ),
236
- ]);
237
215
 
238
- const bufferWriter = new BufferWriter(Buffer.allocUnsafe(expectedBuffer.length));
239
- values.forEach((value: Buffer[]) => {
216
+ // Build expected data manually
217
+ const parts: Uint8Array[] = [];
218
+ // First vector: count=2, then items
219
+ parts.push(new Uint8Array([0x02]));
220
+ parts.push(new Uint8Array([0x01, 0x04]));
221
+ parts.push(new Uint8Array([0xfd, 0xfd, 0x00, ...new Array(253).fill(5)]));
222
+ // Second vector: count=253, then 253 items of [0x01, 0x06]
223
+ parts.push(new Uint8Array([0xfd, 0xfd, 0x00]));
224
+ for (let i = 0; i < 253; i++) {
225
+ parts.push(new Uint8Array([0x01, 0x06]));
226
+ }
227
+
228
+ const totalLength = parts.reduce((sum, p) => sum + p.length, 0);
229
+ const expectedData = new Uint8Array(totalLength);
230
+ let offset = 0;
231
+ for (const part of parts) {
232
+ expectedData.set(part, offset);
233
+ offset += part.length;
234
+ }
235
+
236
+ const writer = new BinaryWriter(expectedData.length);
237
+ values.forEach((value: Uint8Array[]) => {
240
238
  const expectedOffset =
241
- bufferWriter.offset +
239
+ writer.offset +
242
240
  varuint.encodingLength(value.length) +
243
241
  value.reduce(
244
242
  (sum: number, v) => sum + varuint.encodingLength(v.length) + v.length,
245
243
  0,
246
244
  );
247
- bufferWriter.writeVector(value);
248
- testBuffer(bufferWriter, expectedBuffer, expectedOffset);
245
+ writer.writeVector(value);
246
+ testBuffer(writer, expectedData, expectedOffset);
249
247
  });
250
- testBuffer(bufferWriter, expectedBuffer);
248
+ testBuffer(writer, expectedData);
251
249
  });
252
250
 
253
- it('end', () => {
254
- const expected = Buffer.from('0403020108070605', 'hex');
255
- const bufferWriter = BufferWriter.withCapacity(8);
256
- bufferWriter.writeUInt32(0x01020304);
257
- bufferWriter.writeUInt32(0x05060708);
258
- const result = bufferWriter.end();
259
- testBuffer(bufferWriter, result);
260
- testBuffer(bufferWriter, expected);
251
+ it('finish', () => {
252
+ const expected = fromHex('0403020108070605');
253
+ const writer = new BinaryWriter(8);
254
+ writer.writeUInt32LE(0x01020304);
255
+ writer.writeUInt32LE(0x05060708);
256
+ const result = writer.finish();
257
+ testBuffer(writer, result);
258
+ assert.deepStrictEqual(result, expected);
261
259
  });
262
260
  });
263
261
 
264
- describe('BufferReader', () => {
262
+ describe('BinaryReader', () => {
265
263
  function testValue(
266
- bufferReader: BufferReader,
267
- value: Buffer | number,
268
- expectedValue: Buffer | number,
269
- expectedOffset: number = Buffer.isBuffer(expectedValue) ? expectedValue.length : 0,
264
+ reader: BinaryReader,
265
+ value: Uint8Array | number | bigint,
266
+ expectedValue: Uint8Array | number | bigint,
267
+ expectedOffset: number = 0,
270
268
  ): void {
271
- assert.strictEqual(bufferReader.offset, expectedOffset);
272
- if (Buffer.isBuffer(expectedValue)) {
269
+ assert.strictEqual(reader.offset, expectedOffset);
270
+ if (value instanceof Uint8Array && expectedValue instanceof Uint8Array) {
273
271
  assert.deepStrictEqual(
274
- (value as Buffer).slice(0, expectedOffset),
272
+ value.slice(0, expectedOffset),
275
273
  expectedValue.slice(0, expectedOffset),
276
274
  );
277
275
  } else {
278
- assert.strictEqual(value as number, expectedValue);
276
+ assert.strictEqual(value, expectedValue);
279
277
  }
280
278
  }
281
279
 
282
280
  it('readUInt8', () => {
283
281
  const values = [0, 1, 0xfe, 0xff];
284
- const buffer = Buffer.from([0, 1, 0xfe, 0xff]);
285
- const bufferReader = new BufferReader(buffer);
282
+ const data = new Uint8Array([0, 1, 0xfe, 0xff]);
283
+ const reader = new BinaryReader(data);
286
284
  values.forEach((v: number) => {
287
- const expectedOffset = bufferReader.offset + 1;
288
- const val = bufferReader.readUInt8();
289
- testValue(bufferReader, val, v, expectedOffset);
285
+ const expectedOffset = reader.offset + 1;
286
+ const val = reader.readUInt8();
287
+ testValue(reader, val, v, expectedOffset);
290
288
  });
291
289
  });
292
290
 
293
- it('readInt32', () => {
291
+ it('readInt32LE', () => {
294
292
  const values = [0, 1, Math.pow(2, 31) - 2, Math.pow(2, 31) - 1, -1, -Math.pow(2, 31)];
295
- const buffer = concatToBuffer([
293
+ const data = concatToBuffer([
296
294
  [0, 0, 0, 0],
297
295
  [1, 0, 0, 0],
298
296
  [0xfe, 0xff, 0xff, 0x7f],
@@ -300,44 +298,44 @@ describe('bufferutils', () => {
300
298
  [0xff, 0xff, 0xff, 0xff],
301
299
  [0x00, 0x00, 0x00, 0x80],
302
300
  ]);
303
- const bufferReader = new BufferReader(buffer);
301
+ const reader = new BinaryReader(data);
304
302
  values.forEach((value: number) => {
305
- const expectedOffset = bufferReader.offset + 4;
306
- const val = bufferReader.readInt32();
307
- testValue(bufferReader, val, value, expectedOffset);
303
+ const expectedOffset = reader.offset + 4;
304
+ const val = reader.readInt32LE();
305
+ testValue(reader, val, value, expectedOffset);
308
306
  });
309
307
  });
310
308
 
311
- it('readUInt32', () => {
309
+ it('readUInt32LE', () => {
312
310
  const maxUInt32 = Math.pow(2, 32) - 1;
313
311
  const values = [0, 1, Math.pow(2, 16), maxUInt32];
314
- const buffer = concatToBuffer([
312
+ const data = concatToBuffer([
315
313
  [0, 0, 0, 0],
316
314
  [1, 0, 0, 0],
317
315
  [0, 0, 1, 0],
318
316
  [0xff, 0xff, 0xff, 0xff],
319
317
  ]);
320
- const bufferReader = new BufferReader(buffer);
318
+ const reader = new BinaryReader(data);
321
319
  values.forEach((value: number) => {
322
- const expectedOffset = bufferReader.offset + 4;
323
- const val = bufferReader.readUInt32();
324
- testValue(bufferReader, val, value, expectedOffset);
320
+ const expectedOffset = reader.offset + 4;
321
+ const val = reader.readUInt32LE();
322
+ testValue(reader, val, value, expectedOffset);
325
323
  });
326
324
  });
327
325
 
328
- it('readUInt64', () => {
329
- const values = [0, 1, Math.pow(2, 32), Number.MAX_SAFE_INTEGER /* 2^53 - 1 */];
330
- const buffer = concatToBuffer([
326
+ it('readUInt64LE', () => {
327
+ const values = [0n, 1n, BigInt(Math.pow(2, 32)), BigInt(Number.MAX_SAFE_INTEGER)];
328
+ const data = concatToBuffer([
331
329
  [0, 0, 0, 0, 0, 0, 0, 0],
332
330
  [1, 0, 0, 0, 0, 0, 0, 0],
333
331
  [0, 0, 0, 0, 1, 0, 0, 0],
334
332
  [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00],
335
333
  ]);
336
- const bufferReader = new BufferReader(buffer);
337
- values.forEach((value: number) => {
338
- const expectedOffset = bufferReader.offset + 8;
339
- const val = bufferReader.readUInt64();
340
- testValue(bufferReader, val, value, expectedOffset);
334
+ const reader = new BinaryReader(data);
335
+ values.forEach((value: bigint) => {
336
+ const expectedOffset = reader.offset + 8;
337
+ const val = reader.readUInt64LE();
338
+ testValue(reader, val, value, expectedOffset);
341
339
  });
342
340
  });
343
341
 
@@ -358,7 +356,7 @@ describe('bufferutils', () => {
358
356
  Math.pow(2, 32),
359
357
  Number.MAX_SAFE_INTEGER,
360
358
  ];
361
- const buffer = concatToBuffer([
359
+ const data = concatToBuffer([
362
360
  [0x00],
363
361
  [0x01],
364
362
  [0xfc],
@@ -374,76 +372,92 @@ describe('bufferutils', () => {
374
372
  [0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00],
375
373
  [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00],
376
374
  ]);
377
- const bufferReader = new BufferReader(buffer);
375
+ const reader = new BinaryReader(data);
378
376
  values.forEach((value: number) => {
379
- const expectedOffset = bufferReader.offset + varuint.encodingLength(value);
380
- const val = bufferReader.readVarInt();
381
- testValue(bufferReader, val, value, expectedOffset);
377
+ const expectedOffset = reader.offset + varuint.encodingLength(value);
378
+ const val = reader.readVarInt();
379
+ testValue(reader, val, value, expectedOffset);
382
380
  });
383
381
  });
384
382
 
385
- it('readSlice', () => {
383
+ it('readBytes', () => {
386
384
  const values = [[1], [1, 2, 3, 4], [254, 255]];
387
- const buffer = concatToBuffer(values);
388
- const bufferReader = new BufferReader(buffer);
385
+ const data = concatToBuffer(values);
386
+ const reader = new BinaryReader(data);
389
387
  values.forEach((v: number[]) => {
390
- const expectedOffset = bufferReader.offset + v.length;
391
- const val = bufferReader.readSlice(v.length);
392
- testValue(bufferReader, val, Buffer.from(v), expectedOffset);
388
+ const expectedOffset = reader.offset + v.length;
389
+ const val = reader.readBytes(v.length);
390
+ assert.strictEqual(reader.offset, expectedOffset);
391
+ assert.deepStrictEqual(Array.from(val), v);
393
392
  });
394
393
  assert.throws(() => {
395
- bufferReader.readSlice(2);
396
- }, /^Error: Cannot read slice out of bounds$/);
394
+ reader.readBytes(2);
395
+ }, /past end|out of bounds/);
397
396
  });
398
397
 
399
- it('readVarSlice', () => {
400
- const values = [Buffer.alloc(1, 1), Buffer.alloc(252, 2), Buffer.alloc(253, 3)];
401
- const buffer = Buffer.concat([
402
- Buffer.from([0x01, 0x01]),
403
- Buffer.from([0xfc]),
404
- Buffer.alloc(252, 0x02),
405
- Buffer.from([0xfd, 0xfd, 0x00]),
406
- Buffer.alloc(253, 0x03),
407
- ]);
408
- const bufferReader = new BufferReader(buffer);
409
- values.forEach((value: Buffer) => {
398
+ it('readVarBytes', () => {
399
+ const values = [
400
+ new Uint8Array(1).fill(1),
401
+ new Uint8Array(252).fill(2),
402
+ new Uint8Array(253).fill(3),
403
+ ];
404
+ const part1 = new Uint8Array([0x01, 0x01]);
405
+ const part2 = new Uint8Array([0xfc, ...new Array(252).fill(0x02)]);
406
+ const part3 = new Uint8Array([0xfd, 0xfd, 0x00, ...new Array(253).fill(0x03)]);
407
+ const data = new Uint8Array(part1.length + part2.length + part3.length);
408
+ data.set(part1, 0);
409
+ data.set(part2, part1.length);
410
+ data.set(part3, part1.length + part2.length);
411
+
412
+ const reader = new BinaryReader(data);
413
+ values.forEach((value: Uint8Array) => {
410
414
  const expectedOffset =
411
- bufferReader.offset + varuint.encodingLength(value.length) + value.length;
412
- const val = bufferReader.readVarSlice();
413
- testValue(bufferReader, val, value, expectedOffset);
415
+ reader.offset + varuint.encodingLength(value.length) + value.length;
416
+ const val = reader.readVarBytes();
417
+ assert.strictEqual(reader.offset, expectedOffset);
418
+ assert.deepStrictEqual(val, value);
414
419
  });
415
420
  });
416
421
 
417
422
  it('readVector', () => {
418
423
  const values = [
419
- [Buffer.alloc(1, 4), Buffer.alloc(253, 5)],
420
- Array(253).fill(Buffer.alloc(1, 6)),
424
+ [new Uint8Array(1).fill(4), new Uint8Array(253).fill(5)],
425
+ Array(253).fill(new Uint8Array(1).fill(6)),
421
426
  ];
422
- const buffer = Buffer.concat([
423
- Buffer.from([0x02]),
424
- Buffer.from([0x01, 0x04]),
425
- Buffer.from([0xfd, 0xfd, 0x00]),
426
- Buffer.alloc(253, 5),
427
-
428
- Buffer.from([0xfd, 0xfd, 0x00]),
429
- Buffer.concat(
430
- Array(253)
431
- .fill(0)
432
- .map(() => Buffer.from([0x01, 0x06])),
433
- ),
434
- ]);
435
427
 
436
- const bufferReader = new BufferReader(buffer);
437
- values.forEach((value: Buffer[]) => {
428
+ // Build data manually
429
+ const parts: Uint8Array[] = [];
430
+ parts.push(new Uint8Array([0x02]));
431
+ parts.push(new Uint8Array([0x01, 0x04]));
432
+ parts.push(new Uint8Array([0xfd, 0xfd, 0x00, ...new Array(253).fill(5)]));
433
+ parts.push(new Uint8Array([0xfd, 0xfd, 0x00]));
434
+ for (let i = 0; i < 253; i++) {
435
+ parts.push(new Uint8Array([0x01, 0x06]));
436
+ }
437
+
438
+ const totalLength = parts.reduce((sum, p) => sum + p.length, 0);
439
+ const data = new Uint8Array(totalLength);
440
+ let offset = 0;
441
+ for (const part of parts) {
442
+ data.set(part, offset);
443
+ offset += part.length;
444
+ }
445
+
446
+ const reader = new BinaryReader(data);
447
+ values.forEach((value: Uint8Array[]) => {
438
448
  const expectedOffset =
439
- bufferReader.offset +
449
+ reader.offset +
440
450
  varuint.encodingLength(value.length) +
441
451
  value.reduce(
442
452
  (sum: number, v) => sum + varuint.encodingLength(v.length) + v.length,
443
453
  0,
444
454
  );
445
- const val = bufferReader.readVector();
446
- testValue(bufferReader, Buffer.concat(val), Buffer.concat(value), expectedOffset);
455
+ const val = reader.readVector();
456
+ assert.strictEqual(reader.offset, expectedOffset);
457
+ assert.strictEqual(val.length, value.length);
458
+ for (let i = 0; i < val.length; i++) {
459
+ assert.deepStrictEqual(val[i], value[i]);
460
+ }
447
461
  });
448
462
  });
449
463
  });