@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
@@ -0,0 +1,276 @@
1
+ /**
2
+ * Stateful binary reader with a single DataView instance.
3
+ *
4
+ * Zero allocations during read operations. The DataView is created once
5
+ * in the constructor and reused for all reads.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ /**
10
+ * High-performance binary reader for parsing binary data.
11
+ *
12
+ * Creates exactly ONE DataView instance that is reused for all read operations.
13
+ * This eliminates garbage collection pressure from repeated DataView allocations.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * import { BinaryReader, fromHex } from '@btc-vision/bitcoin';
18
+ *
19
+ * // Parse a Bitcoin transaction
20
+ * const data = fromHex('01000000...');
21
+ * const reader = new BinaryReader(data);
22
+ *
23
+ * const version = reader.readInt32LE();
24
+ * const inputCount = reader.readVarInt();
25
+ *
26
+ * for (let i = 0; i < inputCount; i++) {
27
+ * const txid = reader.readBytes(32);
28
+ * const vout = reader.readUInt32LE();
29
+ * const script = reader.readVarBytes();
30
+ * const sequence = reader.readUInt32LE();
31
+ * }
32
+ * ```
33
+ */
34
+ export declare class BinaryReader {
35
+ #private;
36
+ /**
37
+ * Creates a new BinaryReader.
38
+ *
39
+ * @param data - The byte array to read from
40
+ * @param offset - Initial read position (default 0)
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * import { BinaryReader, fromHex } from '@btc-vision/bitcoin';
45
+ *
46
+ * const data = fromHex('01020304');
47
+ * const reader = new BinaryReader(data);
48
+ * ```
49
+ */
50
+ constructor(data: Uint8Array, offset?: number);
51
+ /**
52
+ * Current read position in the buffer.
53
+ */
54
+ get offset(): number;
55
+ /**
56
+ * Sets the read position.
57
+ *
58
+ * @param value - New offset value
59
+ * @throws RangeError if offset is negative or beyond buffer length
60
+ */
61
+ set offset(value: number);
62
+ /**
63
+ * Total length of the underlying buffer.
64
+ */
65
+ get length(): number;
66
+ /**
67
+ * Number of bytes remaining to be read.
68
+ */
69
+ get remaining(): number;
70
+ /**
71
+ * The underlying data buffer.
72
+ */
73
+ get data(): Uint8Array;
74
+ /**
75
+ * Creates a BinaryReader from a hex string.
76
+ *
77
+ * @param hex - Hex string (with or without 0x prefix)
78
+ * @returns A new BinaryReader instance
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * import { BinaryReader } from '@btc-vision/bitcoin';
83
+ *
84
+ * const reader = BinaryReader.fromHex('01000000');
85
+ * const version = reader.readInt32LE(); // 1
86
+ * ```
87
+ */
88
+ static fromHex(hex: string): BinaryReader;
89
+ /**
90
+ * Reads an 8-bit unsigned integer.
91
+ *
92
+ * @returns The value (0-255)
93
+ * @throws RangeError if reading past end of buffer
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const reader = BinaryReader.fromHex('ff');
98
+ * reader.readUInt8(); // 255
99
+ * ```
100
+ */
101
+ readUInt8(): number;
102
+ /**
103
+ * Reads an 8-bit signed integer.
104
+ *
105
+ * @returns The value (-128 to 127)
106
+ * @throws RangeError if reading past end of buffer
107
+ */
108
+ readInt8(): number;
109
+ /**
110
+ * Reads a 16-bit unsigned integer in little-endian format.
111
+ *
112
+ * @returns The value (0-65535)
113
+ * @throws RangeError if reading past end of buffer
114
+ *
115
+ * @example
116
+ * ```typescript
117
+ * const reader = BinaryReader.fromHex('0100'); // 1 in LE
118
+ * reader.readUInt16LE(); // 1
119
+ * ```
120
+ */
121
+ readUInt16LE(): number;
122
+ /**
123
+ * Reads a 16-bit signed integer in little-endian format.
124
+ *
125
+ * @returns The value (-32768 to 32767)
126
+ * @throws RangeError if reading past end of buffer
127
+ */
128
+ readInt16LE(): number;
129
+ /**
130
+ * Reads a 32-bit unsigned integer in little-endian format.
131
+ *
132
+ * @returns The value (0 to 4294967295)
133
+ * @throws RangeError if reading past end of buffer
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * const reader = BinaryReader.fromHex('01000000'); // 1 in LE
138
+ * reader.readUInt32LE(); // 1
139
+ * ```
140
+ */
141
+ readUInt32LE(): number;
142
+ /**
143
+ * Reads a 32-bit signed integer in little-endian format.
144
+ *
145
+ * @returns The value (-2147483648 to 2147483647)
146
+ * @throws RangeError if reading past end of buffer
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * const reader = BinaryReader.fromHex('ffffffff'); // -1 in LE signed
151
+ * reader.readInt32LE(); // -1
152
+ * ```
153
+ */
154
+ readInt32LE(): number;
155
+ /**
156
+ * Reads a 64-bit unsigned integer in little-endian format as bigint.
157
+ *
158
+ * @returns The value as bigint
159
+ * @throws RangeError if reading past end of buffer
160
+ *
161
+ * @example
162
+ * ```typescript
163
+ * const reader = BinaryReader.fromHex('0100000000000000'); // 1 in LE 64-bit
164
+ * reader.readUInt64LE(); // 1n
165
+ * ```
166
+ */
167
+ readUInt64LE(): bigint;
168
+ /**
169
+ * Reads a 64-bit signed integer in little-endian format as bigint.
170
+ *
171
+ * @returns The value as bigint
172
+ * @throws RangeError if reading past end of buffer
173
+ */
174
+ readInt64LE(): bigint;
175
+ /**
176
+ * Reads a specified number of bytes.
177
+ *
178
+ * Returns a subarray view (no copy) for performance.
179
+ * Use readBytesCopy() if you need an independent copy.
180
+ *
181
+ * @param length - Number of bytes to read
182
+ * @returns Uint8Array view into the buffer
183
+ * @throws RangeError if reading past end of buffer
184
+ *
185
+ * @example
186
+ * ```typescript
187
+ * const reader = BinaryReader.fromHex('deadbeefcafebabe');
188
+ * const first4 = reader.readBytes(4); // deadbeef
189
+ * const next4 = reader.readBytes(4); // cafebabe
190
+ * ```
191
+ */
192
+ readBytes(length: number): Uint8Array;
193
+ /**
194
+ * Reads a specified number of bytes as an independent copy.
195
+ *
196
+ * @param length - Number of bytes to read
197
+ * @returns New Uint8Array with copied data
198
+ * @throws RangeError if reading past end of buffer
199
+ */
200
+ readBytesCopy(length: number): Uint8Array;
201
+ /**
202
+ * Reads a Bitcoin CompactSize variable-length integer.
203
+ *
204
+ * CompactSize encoding:
205
+ * - 0x00-0xFC: 1 byte (value as-is)
206
+ * - 0xFD: 3 bytes (0xFD + 2-byte LE uint16)
207
+ * - 0xFE: 5 bytes (0xFE + 4-byte LE uint32)
208
+ * - 0xFF: 9 bytes (0xFF + 8-byte LE uint64)
209
+ *
210
+ * @returns The decoded integer value
211
+ * @throws RangeError if reading past end of buffer
212
+ * @throws RangeError if value exceeds MAX_SAFE_INTEGER
213
+ *
214
+ * @example
215
+ * ```typescript
216
+ * const reader = BinaryReader.fromHex('fd0302'); // 515 encoded
217
+ * reader.readVarInt(); // 515
218
+ * ```
219
+ */
220
+ readVarInt(): number;
221
+ /**
222
+ * Reads a Bitcoin CompactSize variable-length integer as bigint.
223
+ *
224
+ * Use this when you need the full 64-bit range.
225
+ *
226
+ * @returns The decoded integer value as bigint
227
+ * @throws RangeError if reading past end of buffer
228
+ */
229
+ readVarIntBig(): bigint;
230
+ /**
231
+ * Reads a length-prefixed byte array (VarInt length + bytes).
232
+ *
233
+ * @returns Uint8Array view into the buffer
234
+ * @throws RangeError if reading past end of buffer
235
+ *
236
+ * @example
237
+ * ```typescript
238
+ * const reader = BinaryReader.fromHex('04deadbeef');
239
+ * reader.readVarBytes(); // Uint8Array [0xde, 0xad, 0xbe, 0xef]
240
+ * ```
241
+ */
242
+ readVarBytes(): Uint8Array;
243
+ /**
244
+ * Reads an array of length-prefixed byte arrays.
245
+ *
246
+ * Format: VarInt count + (VarInt length + bytes) for each item.
247
+ *
248
+ * @returns Array of Uint8Array views
249
+ * @throws RangeError if reading past end of buffer
250
+ */
251
+ readVector(): Uint8Array[];
252
+ /**
253
+ * Peeks at the next byte without advancing the position.
254
+ *
255
+ * @returns The next byte value, or undefined if at end
256
+ */
257
+ peek(): number | undefined;
258
+ /**
259
+ * Skips a specified number of bytes.
260
+ *
261
+ * @param length - Number of bytes to skip
262
+ * @throws RangeError if skipping past end of buffer
263
+ */
264
+ skip(length: number): void;
265
+ /**
266
+ * Resets the read position to the beginning.
267
+ */
268
+ reset(): void;
269
+ /**
270
+ * Checks if there are more bytes to read.
271
+ *
272
+ * @returns True if there are remaining bytes
273
+ */
274
+ hasMore(): boolean;
275
+ }
276
+ //# sourceMappingURL=BinaryReader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BinaryReader.d.ts","sourceRoot":"","sources":["../../src/io/BinaryReader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,YAAY;;IAgBrB;;;;;;;;;;;;;OAaG;gBACgB,IAAI,EAAE,UAAU,EAAE,MAAM,GAAE,MAAU;IAMvD;;OAEG;IACH,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED;;;;;OAKG;IACH,IAAW,MAAM,CAAC,KAAK,EAAE,MAAM,EAK9B;IAED;;OAEG;IACH,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED;;OAEG;IACH,IAAW,IAAI,IAAI,UAAU,CAE5B;IAED;;;;;;;;;;;;;OAaG;WACW,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY;IAIhD;;;;;;;;;;;OAWG;IACI,SAAS,IAAI,MAAM;IAO1B;;;;;OAKG;IACI,QAAQ,IAAI,MAAM;IAKzB;;;;;;;;;;;OAWG;IACI,YAAY,IAAI,MAAM;IAS7B;;;;;OAKG;IACI,WAAW,IAAI,MAAM;IAS5B;;;;;;;;;;;OAWG;IACI,YAAY,IAAI,MAAM;IAS7B;;;;;;;;;;;OAWG;IACI,WAAW,IAAI,MAAM;IAS5B;;;;;;;;;;;OAWG;IACI,YAAY,IAAI,MAAM;IAS7B;;;;;OAKG;IACI,WAAW,IAAI,MAAM;IAS5B;;;;;;;;;;;;;;;;OAgBG;IACI,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IAS5C;;;;;;OAMG;IACI,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IAShD;;;;;;;;;;;;;;;;;;OAkBG;IACI,UAAU,IAAI,MAAM;IAuB3B;;;;;;;OAOG;IACI,aAAa,IAAI,MAAM;IAmB9B;;;;;;;;;;;OAWG;IACI,YAAY,IAAI,UAAU;IAKjC;;;;;;;OAOG;IACI,UAAU,IAAI,UAAU,EAAE;IASjC;;;;OAIG;IACI,IAAI,IAAI,MAAM,GAAG,SAAS;IAOjC;;;;;OAKG;IACI,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOjC;;OAEG;IACI,KAAK,IAAI,IAAI;IAIpB;;;;OAIG;IACI,OAAO,IAAI,OAAO;CAG5B"}
@@ -0,0 +1,425 @@
1
+ /**
2
+ * Stateful binary reader with a single DataView instance.
3
+ *
4
+ * Zero allocations during read operations. The DataView is created once
5
+ * in the constructor and reused for all reads.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import { fromHex } from './hex.js';
10
+ /**
11
+ * High-performance binary reader for parsing binary data.
12
+ *
13
+ * Creates exactly ONE DataView instance that is reused for all read operations.
14
+ * This eliminates garbage collection pressure from repeated DataView allocations.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * import { BinaryReader, fromHex } from '@btc-vision/bitcoin';
19
+ *
20
+ * // Parse a Bitcoin transaction
21
+ * const data = fromHex('01000000...');
22
+ * const reader = new BinaryReader(data);
23
+ *
24
+ * const version = reader.readInt32LE();
25
+ * const inputCount = reader.readVarInt();
26
+ *
27
+ * for (let i = 0; i < inputCount; i++) {
28
+ * const txid = reader.readBytes(32);
29
+ * const vout = reader.readUInt32LE();
30
+ * const script = reader.readVarBytes();
31
+ * const sequence = reader.readUInt32LE();
32
+ * }
33
+ * ```
34
+ */
35
+ export class BinaryReader {
36
+ /**
37
+ * The underlying byte array.
38
+ */
39
+ #data;
40
+ /**
41
+ * Single DataView instance reused for all reads.
42
+ */
43
+ #view;
44
+ /**
45
+ * Current read position.
46
+ */
47
+ #offset;
48
+ /**
49
+ * Creates a new BinaryReader.
50
+ *
51
+ * @param data - The byte array to read from
52
+ * @param offset - Initial read position (default 0)
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * import { BinaryReader, fromHex } from '@btc-vision/bitcoin';
57
+ *
58
+ * const data = fromHex('01020304');
59
+ * const reader = new BinaryReader(data);
60
+ * ```
61
+ */
62
+ constructor(data, offset = 0) {
63
+ this.#data = data;
64
+ this.#view = new DataView(data.buffer, data.byteOffset, data.byteLength);
65
+ this.#offset = offset;
66
+ }
67
+ /**
68
+ * Current read position in the buffer.
69
+ */
70
+ get offset() {
71
+ return this.#offset;
72
+ }
73
+ /**
74
+ * Sets the read position.
75
+ *
76
+ * @param value - New offset value
77
+ * @throws RangeError if offset is negative or beyond buffer length
78
+ */
79
+ set offset(value) {
80
+ if (value < 0 || value > this.#data.length) {
81
+ throw new RangeError(`Offset ${value} is out of bounds [0, ${this.#data.length}]`);
82
+ }
83
+ this.#offset = value;
84
+ }
85
+ /**
86
+ * Total length of the underlying buffer.
87
+ */
88
+ get length() {
89
+ return this.#data.length;
90
+ }
91
+ /**
92
+ * Number of bytes remaining to be read.
93
+ */
94
+ get remaining() {
95
+ return this.#data.length - this.#offset;
96
+ }
97
+ /**
98
+ * The underlying data buffer.
99
+ */
100
+ get data() {
101
+ return this.#data;
102
+ }
103
+ /**
104
+ * Creates a BinaryReader from a hex string.
105
+ *
106
+ * @param hex - Hex string (with or without 0x prefix)
107
+ * @returns A new BinaryReader instance
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * import { BinaryReader } from '@btc-vision/bitcoin';
112
+ *
113
+ * const reader = BinaryReader.fromHex('01000000');
114
+ * const version = reader.readInt32LE(); // 1
115
+ * ```
116
+ */
117
+ static fromHex(hex) {
118
+ return new BinaryReader(fromHex(hex));
119
+ }
120
+ /**
121
+ * Reads an 8-bit unsigned integer.
122
+ *
123
+ * @returns The value (0-255)
124
+ * @throws RangeError if reading past end of buffer
125
+ *
126
+ * @example
127
+ * ```typescript
128
+ * const reader = BinaryReader.fromHex('ff');
129
+ * reader.readUInt8(); // 255
130
+ * ```
131
+ */
132
+ readUInt8() {
133
+ if (this.#offset >= this.#data.length) {
134
+ throw new RangeError('Read past end of buffer');
135
+ }
136
+ return this.#data[this.#offset++];
137
+ }
138
+ /**
139
+ * Reads an 8-bit signed integer.
140
+ *
141
+ * @returns The value (-128 to 127)
142
+ * @throws RangeError if reading past end of buffer
143
+ */
144
+ readInt8() {
145
+ const value = this.readUInt8();
146
+ return value > 127 ? value - 256 : value;
147
+ }
148
+ /**
149
+ * Reads a 16-bit unsigned integer in little-endian format.
150
+ *
151
+ * @returns The value (0-65535)
152
+ * @throws RangeError if reading past end of buffer
153
+ *
154
+ * @example
155
+ * ```typescript
156
+ * const reader = BinaryReader.fromHex('0100'); // 1 in LE
157
+ * reader.readUInt16LE(); // 1
158
+ * ```
159
+ */
160
+ readUInt16LE() {
161
+ if (this.#offset + 2 > this.#data.length) {
162
+ throw new RangeError('Read past end of buffer');
163
+ }
164
+ const value = this.#view.getUint16(this.#offset, true);
165
+ this.#offset += 2;
166
+ return value;
167
+ }
168
+ /**
169
+ * Reads a 16-bit signed integer in little-endian format.
170
+ *
171
+ * @returns The value (-32768 to 32767)
172
+ * @throws RangeError if reading past end of buffer
173
+ */
174
+ readInt16LE() {
175
+ if (this.#offset + 2 > this.#data.length) {
176
+ throw new RangeError('Read past end of buffer');
177
+ }
178
+ const value = this.#view.getInt16(this.#offset, true);
179
+ this.#offset += 2;
180
+ return value;
181
+ }
182
+ /**
183
+ * Reads a 32-bit unsigned integer in little-endian format.
184
+ *
185
+ * @returns The value (0 to 4294967295)
186
+ * @throws RangeError if reading past end of buffer
187
+ *
188
+ * @example
189
+ * ```typescript
190
+ * const reader = BinaryReader.fromHex('01000000'); // 1 in LE
191
+ * reader.readUInt32LE(); // 1
192
+ * ```
193
+ */
194
+ readUInt32LE() {
195
+ if (this.#offset + 4 > this.#data.length) {
196
+ throw new RangeError('Read past end of buffer');
197
+ }
198
+ const value = this.#view.getUint32(this.#offset, true);
199
+ this.#offset += 4;
200
+ return value;
201
+ }
202
+ /**
203
+ * Reads a 32-bit signed integer in little-endian format.
204
+ *
205
+ * @returns The value (-2147483648 to 2147483647)
206
+ * @throws RangeError if reading past end of buffer
207
+ *
208
+ * @example
209
+ * ```typescript
210
+ * const reader = BinaryReader.fromHex('ffffffff'); // -1 in LE signed
211
+ * reader.readInt32LE(); // -1
212
+ * ```
213
+ */
214
+ readInt32LE() {
215
+ if (this.#offset + 4 > this.#data.length) {
216
+ throw new RangeError('Read past end of buffer');
217
+ }
218
+ const value = this.#view.getInt32(this.#offset, true);
219
+ this.#offset += 4;
220
+ return value;
221
+ }
222
+ /**
223
+ * Reads a 64-bit unsigned integer in little-endian format as bigint.
224
+ *
225
+ * @returns The value as bigint
226
+ * @throws RangeError if reading past end of buffer
227
+ *
228
+ * @example
229
+ * ```typescript
230
+ * const reader = BinaryReader.fromHex('0100000000000000'); // 1 in LE 64-bit
231
+ * reader.readUInt64LE(); // 1n
232
+ * ```
233
+ */
234
+ readUInt64LE() {
235
+ if (this.#offset + 8 > this.#data.length) {
236
+ throw new RangeError('Read past end of buffer');
237
+ }
238
+ const value = this.#view.getBigUint64(this.#offset, true);
239
+ this.#offset += 8;
240
+ return value;
241
+ }
242
+ /**
243
+ * Reads a 64-bit signed integer in little-endian format as bigint.
244
+ *
245
+ * @returns The value as bigint
246
+ * @throws RangeError if reading past end of buffer
247
+ */
248
+ readInt64LE() {
249
+ if (this.#offset + 8 > this.#data.length) {
250
+ throw new RangeError('Read past end of buffer');
251
+ }
252
+ const value = this.#view.getBigInt64(this.#offset, true);
253
+ this.#offset += 8;
254
+ return value;
255
+ }
256
+ /**
257
+ * Reads a specified number of bytes.
258
+ *
259
+ * Returns a subarray view (no copy) for performance.
260
+ * Use readBytesCopy() if you need an independent copy.
261
+ *
262
+ * @param length - Number of bytes to read
263
+ * @returns Uint8Array view into the buffer
264
+ * @throws RangeError if reading past end of buffer
265
+ *
266
+ * @example
267
+ * ```typescript
268
+ * const reader = BinaryReader.fromHex('deadbeefcafebabe');
269
+ * const first4 = reader.readBytes(4); // deadbeef
270
+ * const next4 = reader.readBytes(4); // cafebabe
271
+ * ```
272
+ */
273
+ readBytes(length) {
274
+ if (this.#offset + length > this.#data.length) {
275
+ throw new RangeError('Read past end of buffer');
276
+ }
277
+ const value = this.#data.subarray(this.#offset, this.#offset + length);
278
+ this.#offset += length;
279
+ return value;
280
+ }
281
+ /**
282
+ * Reads a specified number of bytes as an independent copy.
283
+ *
284
+ * @param length - Number of bytes to read
285
+ * @returns New Uint8Array with copied data
286
+ * @throws RangeError if reading past end of buffer
287
+ */
288
+ readBytesCopy(length) {
289
+ if (this.#offset + length > this.#data.length) {
290
+ throw new RangeError('Read past end of buffer');
291
+ }
292
+ const value = this.#data.slice(this.#offset, this.#offset + length);
293
+ this.#offset += length;
294
+ return value;
295
+ }
296
+ /**
297
+ * Reads a Bitcoin CompactSize variable-length integer.
298
+ *
299
+ * CompactSize encoding:
300
+ * - 0x00-0xFC: 1 byte (value as-is)
301
+ * - 0xFD: 3 bytes (0xFD + 2-byte LE uint16)
302
+ * - 0xFE: 5 bytes (0xFE + 4-byte LE uint32)
303
+ * - 0xFF: 9 bytes (0xFF + 8-byte LE uint64)
304
+ *
305
+ * @returns The decoded integer value
306
+ * @throws RangeError if reading past end of buffer
307
+ * @throws RangeError if value exceeds MAX_SAFE_INTEGER
308
+ *
309
+ * @example
310
+ * ```typescript
311
+ * const reader = BinaryReader.fromHex('fd0302'); // 515 encoded
312
+ * reader.readVarInt(); // 515
313
+ * ```
314
+ */
315
+ readVarInt() {
316
+ const first = this.readUInt8();
317
+ if (first < 0xfd) {
318
+ return first;
319
+ }
320
+ if (first === 0xfd) {
321
+ return this.readUInt16LE();
322
+ }
323
+ if (first === 0xfe) {
324
+ return this.readUInt32LE();
325
+ }
326
+ // first === 0xff
327
+ const value = this.readUInt64LE();
328
+ if (value > BigInt(Number.MAX_SAFE_INTEGER)) {
329
+ throw new RangeError('VarInt value exceeds MAX_SAFE_INTEGER');
330
+ }
331
+ return Number(value);
332
+ }
333
+ /**
334
+ * Reads a Bitcoin CompactSize variable-length integer as bigint.
335
+ *
336
+ * Use this when you need the full 64-bit range.
337
+ *
338
+ * @returns The decoded integer value as bigint
339
+ * @throws RangeError if reading past end of buffer
340
+ */
341
+ readVarIntBig() {
342
+ const first = this.readUInt8();
343
+ if (first < 0xfd) {
344
+ return BigInt(first);
345
+ }
346
+ if (first === 0xfd) {
347
+ return BigInt(this.readUInt16LE());
348
+ }
349
+ if (first === 0xfe) {
350
+ return BigInt(this.readUInt32LE());
351
+ }
352
+ // first === 0xff
353
+ return this.readUInt64LE();
354
+ }
355
+ /**
356
+ * Reads a length-prefixed byte array (VarInt length + bytes).
357
+ *
358
+ * @returns Uint8Array view into the buffer
359
+ * @throws RangeError if reading past end of buffer
360
+ *
361
+ * @example
362
+ * ```typescript
363
+ * const reader = BinaryReader.fromHex('04deadbeef');
364
+ * reader.readVarBytes(); // Uint8Array [0xde, 0xad, 0xbe, 0xef]
365
+ * ```
366
+ */
367
+ readVarBytes() {
368
+ const length = this.readVarInt();
369
+ return this.readBytes(length);
370
+ }
371
+ /**
372
+ * Reads an array of length-prefixed byte arrays.
373
+ *
374
+ * Format: VarInt count + (VarInt length + bytes) for each item.
375
+ *
376
+ * @returns Array of Uint8Array views
377
+ * @throws RangeError if reading past end of buffer
378
+ */
379
+ readVector() {
380
+ const count = this.readVarInt();
381
+ const result = [];
382
+ for (let i = 0; i < count; i++) {
383
+ result.push(this.readVarBytes());
384
+ }
385
+ return result;
386
+ }
387
+ /**
388
+ * Peeks at the next byte without advancing the position.
389
+ *
390
+ * @returns The next byte value, or undefined if at end
391
+ */
392
+ peek() {
393
+ if (this.#offset >= this.#data.length) {
394
+ return undefined;
395
+ }
396
+ return this.#data[this.#offset];
397
+ }
398
+ /**
399
+ * Skips a specified number of bytes.
400
+ *
401
+ * @param length - Number of bytes to skip
402
+ * @throws RangeError if skipping past end of buffer
403
+ */
404
+ skip(length) {
405
+ if (this.#offset + length > this.#data.length) {
406
+ throw new RangeError('Skip past end of buffer');
407
+ }
408
+ this.#offset += length;
409
+ }
410
+ /**
411
+ * Resets the read position to the beginning.
412
+ */
413
+ reset() {
414
+ this.#offset = 0;
415
+ }
416
+ /**
417
+ * Checks if there are more bytes to read.
418
+ *
419
+ * @returns True if there are remaining bytes
420
+ */
421
+ hasMore() {
422
+ return this.#offset < this.#data.length;
423
+ }
424
+ }
425
+ //# sourceMappingURL=BinaryReader.js.map