@btc-vision/bitcoin 6.5.5 → 7.0.0-alpha.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 (457) hide show
  1. package/AUDIT/README.md +9 -0
  2. package/HOW_TO_WRITE_GOOD_CODE.md +2436 -0
  3. package/SECURITY.md +27 -0
  4. package/benchmark/psbt-2000-inputs.bench.ts +178 -0
  5. package/benchmark/signing.bench.ts +147 -0
  6. package/browser/address.d.ts +56 -9
  7. package/browser/address.d.ts.map +1 -0
  8. package/browser/bech32utils.d.ts +9 -1
  9. package/browser/bech32utils.d.ts.map +1 -0
  10. package/browser/bip66.d.ts +11 -6
  11. package/browser/bip66.d.ts.map +1 -0
  12. package/browser/block.d.ts +117 -11
  13. package/browser/block.d.ts.map +1 -0
  14. package/browser/branded.d.ts +20 -0
  15. package/browser/branded.d.ts.map +1 -0
  16. package/browser/crypto/crypto.d.ts +1 -0
  17. package/browser/crypto/crypto.d.ts.map +1 -0
  18. package/browser/crypto.d.ts +46 -7
  19. package/browser/crypto.d.ts.map +1 -0
  20. package/browser/ecc/context.d.ts +129 -0
  21. package/browser/ecc/context.d.ts.map +1 -0
  22. package/browser/ecc/index.d.ts +11 -0
  23. package/browser/ecc/index.d.ts.map +1 -0
  24. package/browser/ecc/types.d.ts +128 -0
  25. package/browser/ecc/types.d.ts.map +1 -0
  26. package/browser/ecpair.d.ts +99 -0
  27. package/browser/errors.d.ts +124 -0
  28. package/browser/errors.d.ts.map +1 -0
  29. package/browser/index.d.ts +32 -5
  30. package/browser/index.d.ts.map +1 -0
  31. package/browser/index.js +12482 -101
  32. package/browser/io/BinaryReader.d.ts +276 -0
  33. package/browser/io/BinaryReader.d.ts.map +1 -0
  34. package/browser/io/BinaryWriter.d.ts +391 -0
  35. package/browser/io/BinaryWriter.d.ts.map +1 -0
  36. package/browser/io/MemoryPool.d.ts +220 -0
  37. package/browser/io/MemoryPool.d.ts.map +1 -0
  38. package/browser/io/base64.d.ts +13 -0
  39. package/browser/io/base64.d.ts.map +1 -0
  40. package/browser/io/hex.d.ts +67 -0
  41. package/browser/io/hex.d.ts.map +1 -0
  42. package/browser/io/index.d.ts +17 -0
  43. package/browser/io/index.d.ts.map +1 -0
  44. package/browser/io/utils.d.ts +199 -0
  45. package/browser/io/utils.d.ts.map +1 -0
  46. package/browser/merkle.d.ts +10 -1
  47. package/browser/merkle.d.ts.map +1 -0
  48. package/browser/networks.d.ts +70 -9
  49. package/browser/networks.d.ts.map +1 -0
  50. package/browser/opcodes.d.ts +1 -0
  51. package/browser/opcodes.d.ts.map +1 -0
  52. package/browser/payments/bip341.d.ts +35 -9
  53. package/browser/payments/bip341.d.ts.map +1 -0
  54. package/browser/payments/embed.d.ts +112 -1
  55. package/browser/payments/embed.d.ts.map +1 -0
  56. package/browser/payments/index.d.ts +17 -10
  57. package/browser/payments/index.d.ts.map +1 -0
  58. package/browser/payments/p2ms.d.ts +150 -0
  59. package/browser/payments/p2ms.d.ts.map +1 -0
  60. package/browser/payments/p2op.d.ts +150 -24
  61. package/browser/payments/p2op.d.ts.map +1 -0
  62. package/browser/payments/p2pk.d.ts +154 -1
  63. package/browser/payments/p2pk.d.ts.map +1 -0
  64. package/browser/payments/p2pkh.d.ts +176 -1
  65. package/browser/payments/p2pkh.d.ts.map +1 -0
  66. package/browser/payments/p2sh.d.ts +150 -1
  67. package/browser/payments/p2sh.d.ts.map +1 -0
  68. package/browser/payments/p2tr.d.ts +185 -1
  69. package/browser/payments/p2tr.d.ts.map +1 -0
  70. package/browser/payments/p2wpkh.d.ts +161 -1
  71. package/browser/payments/p2wpkh.d.ts.map +1 -0
  72. package/browser/payments/p2wsh.d.ts +146 -1
  73. package/browser/payments/p2wsh.d.ts.map +1 -0
  74. package/browser/payments/types.d.ts +94 -64
  75. package/browser/payments/types.d.ts.map +1 -0
  76. package/browser/psbt/bip371.d.ts +34 -8
  77. package/browser/psbt/bip371.d.ts.map +1 -0
  78. package/browser/psbt/psbtutils.d.ts +56 -16
  79. package/browser/psbt/psbtutils.d.ts.map +1 -0
  80. package/browser/psbt/types.d.ts +245 -0
  81. package/browser/psbt/types.d.ts.map +1 -0
  82. package/browser/psbt/utils.d.ts +64 -0
  83. package/browser/psbt/utils.d.ts.map +1 -0
  84. package/browser/psbt/validation.d.ts +84 -0
  85. package/browser/psbt/validation.d.ts.map +1 -0
  86. package/browser/psbt.d.ts +82 -118
  87. package/browser/psbt.d.ts.map +1 -0
  88. package/browser/pubkey.d.ts +27 -6
  89. package/browser/pubkey.d.ts.map +1 -0
  90. package/browser/push_data.d.ts +24 -2
  91. package/browser/push_data.d.ts.map +1 -0
  92. package/browser/script.d.ts +33 -8
  93. package/browser/script.d.ts.map +1 -0
  94. package/browser/script_number.d.ts +17 -0
  95. package/browser/script_number.d.ts.map +1 -0
  96. package/browser/script_signature.d.ts +23 -5
  97. package/browser/script_signature.d.ts.map +1 -0
  98. package/browser/transaction.d.ts +160 -18
  99. package/browser/transaction.d.ts.map +1 -0
  100. package/browser/types.d.ts +36 -38
  101. package/browser/types.d.ts.map +1 -0
  102. package/browser/workers/WorkerSigningPool.d.ts +143 -0
  103. package/browser/workers/WorkerSigningPool.d.ts.map +1 -0
  104. package/browser/workers/WorkerSigningPool.node.d.ts +116 -0
  105. package/browser/workers/WorkerSigningPool.node.d.ts.map +1 -0
  106. package/browser/workers/ecc-bundle.d.ts +25 -0
  107. package/browser/workers/ecc-bundle.d.ts.map +1 -0
  108. package/browser/workers/index.d.ts +91 -0
  109. package/browser/workers/index.d.ts.map +1 -0
  110. package/browser/workers/psbt-parallel.d.ts +88 -0
  111. package/browser/workers/psbt-parallel.d.ts.map +1 -0
  112. package/browser/workers/signing-worker.d.ts +37 -0
  113. package/browser/workers/signing-worker.d.ts.map +1 -0
  114. package/browser/workers/types.d.ts +365 -0
  115. package/browser/workers/types.d.ts.map +1 -0
  116. package/build/address.d.ts +57 -10
  117. package/build/address.d.ts.map +1 -0
  118. package/build/address.js +80 -24
  119. package/build/address.js.map +1 -0
  120. package/build/bech32utils.d.ts +9 -1
  121. package/build/bech32utils.d.ts.map +1 -0
  122. package/build/bech32utils.js +10 -2
  123. package/build/bech32utils.js.map +1 -0
  124. package/build/bip66.d.ts +11 -6
  125. package/build/bip66.d.ts.map +1 -0
  126. package/build/bip66.js +32 -3
  127. package/build/bip66.js.map +1 -0
  128. package/build/block.d.ts +117 -11
  129. package/build/block.d.ts.map +1 -0
  130. package/build/block.js +204 -72
  131. package/build/block.js.map +1 -0
  132. package/build/branded.d.ts +20 -0
  133. package/build/branded.d.ts.map +1 -0
  134. package/build/branded.js +7 -0
  135. package/build/branded.js.map +1 -0
  136. package/build/crypto/crypto.d.ts +1 -0
  137. package/build/crypto/crypto.d.ts.map +1 -0
  138. package/build/crypto/crypto.js +1 -0
  139. package/build/crypto/crypto.js.map +1 -0
  140. package/build/crypto.d.ts +46 -7
  141. package/build/crypto.d.ts.map +1 -0
  142. package/build/crypto.js +65 -20
  143. package/build/crypto.js.map +1 -0
  144. package/build/ecc/context.d.ts +135 -0
  145. package/build/ecc/context.d.ts.map +1 -0
  146. package/build/ecc/context.js +232 -0
  147. package/build/ecc/context.js.map +1 -0
  148. package/build/ecc/index.d.ts +11 -0
  149. package/build/ecc/index.d.ts.map +1 -0
  150. package/build/ecc/index.js +11 -0
  151. package/build/ecc/index.js.map +1 -0
  152. package/build/ecc/types.d.ts +134 -0
  153. package/build/ecc/types.d.ts.map +1 -0
  154. package/build/ecc/types.js +8 -0
  155. package/build/ecc/types.js.map +1 -0
  156. package/build/errors.d.ts +124 -0
  157. package/build/errors.d.ts.map +1 -0
  158. package/build/errors.js +155 -0
  159. package/build/errors.js.map +1 -0
  160. package/build/index.d.ts +32 -5
  161. package/build/index.d.ts.map +1 -0
  162. package/build/index.js +26 -3
  163. package/build/index.js.map +1 -0
  164. package/build/io/BinaryReader.d.ts +276 -0
  165. package/build/io/BinaryReader.d.ts.map +1 -0
  166. package/build/io/BinaryReader.js +425 -0
  167. package/build/io/BinaryReader.js.map +1 -0
  168. package/build/io/BinaryWriter.d.ts +391 -0
  169. package/build/io/BinaryWriter.d.ts.map +1 -0
  170. package/build/io/BinaryWriter.js +611 -0
  171. package/build/io/BinaryWriter.js.map +1 -0
  172. package/build/io/MemoryPool.d.ts +220 -0
  173. package/build/io/MemoryPool.d.ts.map +1 -0
  174. package/build/io/MemoryPool.js +309 -0
  175. package/build/io/MemoryPool.js.map +1 -0
  176. package/build/io/base64.d.ts +13 -0
  177. package/build/io/base64.d.ts.map +1 -0
  178. package/build/io/base64.js +20 -0
  179. package/build/io/base64.js.map +1 -0
  180. package/build/io/hex.d.ts +67 -0
  181. package/build/io/hex.d.ts.map +1 -0
  182. package/build/io/hex.js +138 -0
  183. package/build/io/hex.js.map +1 -0
  184. package/build/io/index.d.ts +17 -0
  185. package/build/io/index.d.ts.map +1 -0
  186. package/build/io/index.js +23 -0
  187. package/build/io/index.js.map +1 -0
  188. package/build/io/utils.d.ts +199 -0
  189. package/build/io/utils.d.ts.map +1 -0
  190. package/build/io/utils.js +271 -0
  191. package/build/io/utils.js.map +1 -0
  192. package/build/merkle.d.ts +10 -1
  193. package/build/merkle.d.ts.map +1 -0
  194. package/build/merkle.js +12 -1
  195. package/build/merkle.js.map +1 -0
  196. package/build/networks.d.ts +70 -9
  197. package/build/networks.d.ts.map +1 -0
  198. package/build/networks.js +90 -4
  199. package/build/networks.js.map +1 -0
  200. package/build/opcodes.d.ts +1 -0
  201. package/build/opcodes.d.ts.map +1 -0
  202. package/build/opcodes.js +1 -0
  203. package/build/opcodes.js.map +1 -0
  204. package/build/payments/bip341.d.ts +36 -9
  205. package/build/payments/bip341.d.ts.map +1 -0
  206. package/build/payments/bip341.js +35 -15
  207. package/build/payments/bip341.js.map +1 -0
  208. package/build/payments/embed.d.ts +120 -1
  209. package/build/payments/embed.d.ts.map +1 -0
  210. package/build/payments/embed.js +215 -34
  211. package/build/payments/embed.js.map +1 -0
  212. package/build/payments/index.d.ts +17 -10
  213. package/build/payments/index.d.ts.map +1 -0
  214. package/build/payments/index.js +20 -10
  215. package/build/payments/index.js.map +1 -0
  216. package/build/payments/p2ms.d.ts +159 -1
  217. package/build/payments/p2ms.d.ts.map +1 -0
  218. package/build/payments/p2ms.js +427 -108
  219. package/build/payments/p2ms.js.map +1 -0
  220. package/build/payments/p2op.d.ts +158 -24
  221. package/build/payments/p2op.d.ts.map +1 -0
  222. package/build/payments/p2op.js +379 -93
  223. package/build/payments/p2op.js.map +1 -0
  224. package/build/payments/p2pk.d.ts +162 -1
  225. package/build/payments/p2pk.d.ts.map +1 -0
  226. package/build/payments/p2pk.js +327 -58
  227. package/build/payments/p2pk.js.map +1 -0
  228. package/build/payments/p2pkh.d.ts +185 -1
  229. package/build/payments/p2pkh.d.ts.map +1 -0
  230. package/build/payments/p2pkh.js +467 -114
  231. package/build/payments/p2pkh.js.map +1 -0
  232. package/build/payments/p2sh.d.ts +159 -1
  233. package/build/payments/p2sh.d.ts.map +1 -0
  234. package/build/payments/p2sh.js +500 -152
  235. package/build/payments/p2sh.js.map +1 -0
  236. package/build/payments/p2tr.d.ts +193 -1
  237. package/build/payments/p2tr.d.ts.map +1 -0
  238. package/build/payments/p2tr.js +592 -174
  239. package/build/payments/p2tr.js.map +1 -0
  240. package/build/payments/p2wpkh.d.ts +170 -1
  241. package/build/payments/p2wpkh.d.ts.map +1 -0
  242. package/build/payments/p2wpkh.js +429 -104
  243. package/build/payments/p2wpkh.js.map +1 -0
  244. package/build/payments/p2wsh.d.ts +155 -1
  245. package/build/payments/p2wsh.d.ts.map +1 -0
  246. package/build/payments/p2wsh.js +466 -144
  247. package/build/payments/p2wsh.js.map +1 -0
  248. package/build/payments/types.d.ts +98 -64
  249. package/build/payments/types.d.ts.map +1 -0
  250. package/build/payments/types.js +17 -13
  251. package/build/payments/types.js.map +1 -0
  252. package/build/psbt/bip371.d.ts +35 -9
  253. package/build/psbt/bip371.d.ts.map +1 -0
  254. package/build/psbt/bip371.js +113 -28
  255. package/build/psbt/bip371.js.map +1 -0
  256. package/build/psbt/psbtutils.d.ts +56 -16
  257. package/build/psbt/psbtutils.d.ts.map +1 -0
  258. package/build/psbt/psbtutils.js +71 -16
  259. package/build/psbt/psbtutils.js.map +1 -0
  260. package/build/psbt/types.d.ts +249 -0
  261. package/build/psbt/types.d.ts.map +1 -0
  262. package/build/psbt/types.js +6 -0
  263. package/build/psbt/types.js.map +1 -0
  264. package/build/psbt/utils.d.ts +68 -0
  265. package/build/psbt/utils.d.ts.map +1 -0
  266. package/build/psbt/utils.js +171 -0
  267. package/build/psbt/utils.js.map +1 -0
  268. package/build/psbt/validation.d.ts +88 -0
  269. package/build/psbt/validation.d.ts.map +1 -0
  270. package/build/psbt/validation.js +149 -0
  271. package/build/psbt/validation.js.map +1 -0
  272. package/build/psbt.d.ts +84 -120
  273. package/build/psbt.d.ts.map +1 -0
  274. package/build/psbt.js +411 -412
  275. package/build/psbt.js.map +1 -0
  276. package/build/pubkey.d.ts +27 -6
  277. package/build/pubkey.d.ts.map +1 -0
  278. package/build/pubkey.js +37 -13
  279. package/build/pubkey.js.map +1 -0
  280. package/build/push_data.d.ts +24 -2
  281. package/build/push_data.d.ts.map +1 -0
  282. package/build/push_data.js +44 -12
  283. package/build/push_data.js.map +1 -0
  284. package/build/script.d.ts +33 -8
  285. package/build/script.d.ts.map +1 -0
  286. package/build/script.js +100 -36
  287. package/build/script.js.map +1 -0
  288. package/build/script_number.d.ts +17 -0
  289. package/build/script_number.d.ts.map +1 -0
  290. package/build/script_number.js +19 -0
  291. package/build/script_number.js.map +1 -0
  292. package/build/script_signature.d.ts +23 -5
  293. package/build/script_signature.d.ts.map +1 -0
  294. package/build/script_signature.js +48 -15
  295. package/build/script_signature.js.map +1 -0
  296. package/build/transaction.d.ts +160 -18
  297. package/build/transaction.d.ts.map +1 -0
  298. package/build/transaction.js +443 -176
  299. package/build/transaction.js.map +1 -0
  300. package/build/tsconfig.build.tsbuildinfo +1 -0
  301. package/build/types.d.ts +36 -38
  302. package/build/types.d.ts.map +1 -0
  303. package/build/types.js +175 -57
  304. package/build/types.js.map +1 -0
  305. package/build/workers/WorkerSigningPool.d.ts +174 -0
  306. package/build/workers/WorkerSigningPool.d.ts.map +1 -0
  307. package/build/workers/WorkerSigningPool.js +553 -0
  308. package/build/workers/WorkerSigningPool.js.map +1 -0
  309. package/build/workers/WorkerSigningPool.node.d.ts +124 -0
  310. package/build/workers/WorkerSigningPool.node.d.ts.map +1 -0
  311. package/build/workers/WorkerSigningPool.node.js +753 -0
  312. package/build/workers/WorkerSigningPool.node.js.map +1 -0
  313. package/build/workers/ecc-bundle.d.ts +25 -0
  314. package/build/workers/ecc-bundle.d.ts.map +1 -0
  315. package/build/workers/ecc-bundle.js +25 -0
  316. package/build/workers/ecc-bundle.js.map +1 -0
  317. package/build/workers/index.d.ts +91 -0
  318. package/build/workers/index.d.ts.map +1 -0
  319. package/build/workers/index.js +114 -0
  320. package/build/workers/index.js.map +1 -0
  321. package/build/workers/psbt-parallel.d.ts +117 -0
  322. package/build/workers/psbt-parallel.d.ts.map +1 -0
  323. package/build/workers/psbt-parallel.js +233 -0
  324. package/build/workers/psbt-parallel.js.map +1 -0
  325. package/build/workers/signing-worker.d.ts +37 -0
  326. package/build/workers/signing-worker.d.ts.map +1 -0
  327. package/build/workers/signing-worker.js +350 -0
  328. package/build/workers/signing-worker.js.map +1 -0
  329. package/build/workers/types.d.ts +365 -0
  330. package/build/workers/types.d.ts.map +1 -0
  331. package/build/workers/types.js +60 -0
  332. package/build/workers/types.js.map +1 -0
  333. package/package.json +83 -25
  334. package/scripts/bundle-ecc.ts +111 -0
  335. package/src/address.ts +81 -44
  336. package/src/bech32utils.ts +3 -3
  337. package/src/bip66.ts +34 -24
  338. package/src/block.ts +196 -84
  339. package/src/branded.ts +18 -0
  340. package/src/crypto.ts +64 -26
  341. package/src/ecc/context.ts +277 -0
  342. package/src/ecc/index.ts +14 -0
  343. package/src/ecc/types.ts +154 -0
  344. package/src/ecpair.d.ts +99 -0
  345. package/src/errors.ts +163 -0
  346. package/src/index.ts +113 -9
  347. package/src/io/BinaryReader.ts +461 -0
  348. package/src/io/BinaryWriter.ts +696 -0
  349. package/src/io/MemoryPool.ts +343 -0
  350. package/src/io/base64.ts +20 -0
  351. package/src/io/hex.ts +155 -0
  352. package/src/io/index.ts +41 -0
  353. package/src/io/utils.ts +283 -0
  354. package/src/merkle.ts +14 -9
  355. package/src/networks.ts +9 -9
  356. package/src/payments/bip341.ts +34 -33
  357. package/src/payments/embed.ts +244 -41
  358. package/src/payments/index.ts +12 -10
  359. package/src/payments/p2ms.ts +490 -118
  360. package/src/payments/p2op.ts +431 -133
  361. package/src/payments/p2pk.ts +370 -72
  362. package/src/payments/p2pkh.ts +524 -130
  363. package/src/payments/p2sh.ts +572 -172
  364. package/src/payments/p2tr.ts +686 -194
  365. package/src/payments/p2wpkh.ts +484 -107
  366. package/src/payments/p2wsh.ts +526 -164
  367. package/src/payments/types.ts +80 -66
  368. package/src/psbt/bip371.ts +68 -51
  369. package/src/psbt/psbtutils.ts +39 -40
  370. package/src/psbt/types.ts +331 -0
  371. package/src/psbt/utils.ts +188 -0
  372. package/src/psbt/validation.ts +192 -0
  373. package/src/psbt.ts +566 -809
  374. package/src/pubkey.ts +24 -25
  375. package/src/push_data.ts +18 -16
  376. package/src/script.ts +82 -64
  377. package/src/script_number.ts +6 -6
  378. package/src/script_signature.ts +33 -36
  379. package/src/transaction.ts +458 -238
  380. package/src/types.ts +231 -100
  381. package/src/workers/WorkerSigningPool.node.ts +887 -0
  382. package/src/workers/WorkerSigningPool.ts +670 -0
  383. package/src/workers/ecc-bundle.ts +26 -0
  384. package/src/workers/index.ts +165 -0
  385. package/src/workers/psbt-parallel.ts +332 -0
  386. package/src/workers/signing-worker.ts +353 -0
  387. package/src/workers/types.ts +413 -0
  388. package/test/address.spec.ts +9 -6
  389. package/test/bitcoin.core.spec.ts +16 -17
  390. package/test/block.spec.ts +8 -7
  391. package/test/bufferutils.spec.ts +228 -214
  392. package/test/crypto.spec.ts +19 -11
  393. package/test/fixtures/p2pk.json +0 -8
  394. package/test/fixtures/p2pkh.json +1 -1
  395. package/test/fixtures/p2sh.json +1 -1
  396. package/test/fixtures/script.json +1 -1
  397. package/test/fixtures/transaction.json +2 -2
  398. package/test/integration/_regtest.ts +25 -0
  399. package/test/integration/addresses.spec.ts +4 -3
  400. package/test/integration/bip32.spec.ts +2 -1
  401. package/test/integration/blocks.spec.ts +1 -1
  402. package/test/integration/cltv.spec.ts +18 -16
  403. package/test/integration/csv.spec.ts +37 -64
  404. package/test/integration/payments.spec.ts +5 -3
  405. package/test/integration/taproot.spec.ts +76 -83
  406. package/test/integration/transactions.spec.ts +38 -35
  407. package/test/payments.spec.ts +35 -13
  408. package/test/payments.utils.ts +17 -16
  409. package/test/psbt.spec.ts +111 -100
  410. package/test/script.spec.ts +11 -10
  411. package/test/script_signature.spec.ts +9 -11
  412. package/test/taproot-cache.spec.ts +694 -0
  413. package/test/transaction.spec.ts +32 -40
  414. package/test/types.spec.ts +74 -29
  415. package/test/workers-pool.spec.ts +963 -0
  416. package/test/workers-signing.spec.ts +635 -0
  417. package/test/workers.spec.ts +1390 -0
  418. package/tsconfig.base.json +34 -18
  419. package/tsconfig.browser.json +15 -0
  420. package/tsconfig.build.json +5 -0
  421. package/tsconfig.json +5 -14
  422. package/vite.config.browser.ts +3 -42
  423. package/vitest.config.integration.ts +11 -0
  424. package/browser/bufferutils.d.ts +0 -34
  425. package/browser/chunks/crypto-BhCpKpek.js +0 -2033
  426. package/browser/chunks/payments-yjA0Evsv.js +0 -1089
  427. package/browser/chunks/psbt-URK2hBFc.js +0 -4039
  428. package/browser/chunks/script-DyPItFEl.js +0 -318
  429. package/browser/chunks/transaction-C_UbhMGn.js +0 -432
  430. package/browser/chunks/utils-DNZi-T5W.js +0 -761
  431. package/browser/ecc_lib.d.ts +0 -3
  432. package/browser/hooks/AdvancedSignatureManager.d.ts +0 -16
  433. package/browser/hooks/HookedSigner.d.ts +0 -4
  434. package/browser/hooks/SignatureManager.d.ts +0 -13
  435. package/browser/payments/lazy.d.ts +0 -2
  436. package/browser/typeforce.d.ts +0 -38
  437. package/build/bufferutils.d.ts +0 -34
  438. package/build/bufferutils.js +0 -141
  439. package/build/ecc_lib.d.ts +0 -3
  440. package/build/ecc_lib.js +0 -61
  441. package/build/hooks/AdvancedSignatureManager.d.ts +0 -16
  442. package/build/hooks/AdvancedSignatureManager.js +0 -52
  443. package/build/hooks/HookedSigner.d.ts +0 -4
  444. package/build/hooks/HookedSigner.js +0 -64
  445. package/build/hooks/SignatureManager.d.ts +0 -13
  446. package/build/hooks/SignatureManager.js +0 -45
  447. package/build/payments/lazy.d.ts +0 -2
  448. package/build/payments/lazy.js +0 -28
  449. package/build/tsconfig.tsbuildinfo +0 -1
  450. package/src/bufferutils.ts +0 -188
  451. package/src/ecc_lib.ts +0 -94
  452. package/src/hooks/AdvancedSignatureManager.ts +0 -104
  453. package/src/hooks/HookedSigner.ts +0 -108
  454. package/src/hooks/SignatureManager.ts +0 -84
  455. package/src/payments/lazy.ts +0 -28
  456. package/src/typeforce.d.ts +0 -38
  457. package/tsconfig.webpack.json +0 -18
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- import {
1
+ import type {
2
2
  PsbtInput as _PsbtInput,
3
3
  PsbtInputUpdate as _PsbtInputUpdate,
4
4
  PsbtOutput as _PsbtOutput,
@@ -10,7 +10,7 @@ import {
10
10
  TapMerkleRoot as _TapMerkleRoot,
11
11
  TapScriptSig as _TapScriptSig,
12
12
  TapTree as _TapTree,
13
- } from 'bip174/src/lib/interfaces.js';
13
+ } from 'bip174';
14
14
  import * as networks from './networks.js';
15
15
  import * as address from './address.js';
16
16
  import * as payments from './payments/index.js';
@@ -31,10 +31,12 @@ export * from './psbt.js';
31
31
  /** @hidden */
32
32
  export { opcodes } from './opcodes.js';
33
33
  export { Transaction } from './transaction.js';
34
+ export type { TaprootHashCache } from './transaction.js';
34
35
  /** @hidden */
35
36
  export type { Network } from './networks.js';
36
37
  /** @hidden */
37
- export { initEccLib } from './ecc_lib.js';
38
+ export { initEccLib, getEccLib, EccContext } from './ecc/context.js';
39
+ export type { EccLib } from './ecc/types.js';
38
40
  export { PaymentType } from './payments/index.js';
39
41
  export type {
40
42
  Payment,
@@ -79,18 +81,120 @@ export interface PsbtInputUpdate extends _PsbtInputUpdate {}
79
81
 
80
82
  export * from './psbt/bip371.js';
81
83
  export * from './address.js';
82
- export * from './bufferutils.js';
84
+ export {
85
+ toHex,
86
+ fromHex,
87
+ isHex,
88
+ concat,
89
+ equals,
90
+ compare,
91
+ isZero,
92
+ clone,
93
+ reverse,
94
+ reverseCopy,
95
+ alloc,
96
+ xor,
97
+ fromUtf8,
98
+ toUtf8,
99
+ MemoryPool,
100
+ SimpleMemoryPool,
101
+ varuint,
102
+ } from './io/index.js';
83
103
  export * from './payments/bip341.js';
84
104
  export * from './psbt/psbtutils.js';
85
- export { toXOnly, decompressPublicKey, pubkeysMatch, type UncompressedPublicKey } from './pubkey.js';
105
+ export {
106
+ toXOnly,
107
+ decompressPublicKey,
108
+ pubkeysMatch,
109
+ type UncompressedPublicKey,
110
+ } from './pubkey.js';
86
111
 
87
112
  export { TAPLEAF_VERSION_MASK } from './types.js';
113
+ export type { Taptree, Tapleaf } from './types.js';
88
114
  export type {
89
- Taptree,
90
- XOnlyPointAddTweakResult,
91
- Tapleaf,
92
- TinySecp256k1Interface,
115
+ Bytes32,
116
+ Bytes20,
117
+ PublicKey,
118
+ XOnlyPublicKey,
119
+ Satoshi,
120
+ PrivateKey,
121
+ Signature,
122
+ SchnorrSignature,
123
+ Script,
124
+ } from './types.js';
125
+ export {
126
+ isPrivateKey,
127
+ isSchnorrSignature,
128
+ isSignature,
129
+ isScript,
130
+ isBytes32,
131
+ isBytes20,
132
+ isPoint,
133
+ isXOnlyPublicKey,
134
+ isSatoshi,
135
+ assertXOnlyPublicKey,
136
+ assertPrivateKey,
137
+ toBytes32,
138
+ toBytes20,
139
+ toSatoshi,
93
140
  } from './types.js';
141
+ export type { XOnlyPointAddTweakResult } from './ecc/types.js';
142
+
143
+ // Custom error types
144
+ import {
145
+ BitcoinError,
146
+ ValidationError,
147
+ InvalidInputError,
148
+ InvalidOutputError,
149
+ ScriptError,
150
+ PsbtError,
151
+ EccError,
152
+ AddressError,
153
+ SignatureError,
154
+ } from './errors.js';
155
+
156
+ export {
157
+ BitcoinError,
158
+ ValidationError,
159
+ InvalidInputError,
160
+ InvalidOutputError,
161
+ ScriptError,
162
+ PsbtError,
163
+ EccError,
164
+ AddressError,
165
+ SignatureError,
166
+ };
167
+
168
+ /** All error classes grouped as a namespace */
169
+ export const errors = {
170
+ BitcoinError,
171
+ ValidationError,
172
+ InvalidInputError,
173
+ InvalidOutputError,
174
+ ScriptError,
175
+ PsbtError,
176
+ EccError,
177
+ AddressError,
178
+ SignatureError,
179
+ } as const;
180
+
181
+ // Worker-based parallel signing
182
+ export * as workers from './workers/index.js';
183
+ export {
184
+ WorkerSigningPool,
185
+ getSigningPool,
186
+ SignatureType,
187
+ createSigningPool,
188
+ signPsbtParallel,
189
+ } from './workers/index.js';
190
+ export type {
191
+ WorkerPoolConfig,
192
+ SigningTask,
193
+ ParallelSignerKeyPair,
194
+ ParallelSigningResult,
195
+ ParallelSignOptions,
196
+ PsbtParallelKeyPair,
197
+ } from './workers/index.js';
94
198
 
95
199
  const bitcoin = {
96
200
  networks,
@@ -0,0 +1,461 @@
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
+ import { fromHex } from './hex.js';
11
+
12
+ /**
13
+ * High-performance binary reader for parsing binary data.
14
+ *
15
+ * Creates exactly ONE DataView instance that is reused for all read operations.
16
+ * This eliminates garbage collection pressure from repeated DataView allocations.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * import { BinaryReader, fromHex } from '@btc-vision/bitcoin';
21
+ *
22
+ * // Parse a Bitcoin transaction
23
+ * const data = fromHex('01000000...');
24
+ * const reader = new BinaryReader(data);
25
+ *
26
+ * const version = reader.readInt32LE();
27
+ * const inputCount = reader.readVarInt();
28
+ *
29
+ * for (let i = 0; i < inputCount; i++) {
30
+ * const txid = reader.readBytes(32);
31
+ * const vout = reader.readUInt32LE();
32
+ * const script = reader.readVarBytes();
33
+ * const sequence = reader.readUInt32LE();
34
+ * }
35
+ * ```
36
+ */
37
+ export class BinaryReader {
38
+ /**
39
+ * The underlying byte array.
40
+ */
41
+ readonly #data: Uint8Array;
42
+
43
+ /**
44
+ * Single DataView instance reused for all reads.
45
+ */
46
+ readonly #view: DataView;
47
+
48
+ /**
49
+ * Current read position.
50
+ */
51
+ #offset: number;
52
+
53
+ /**
54
+ * Creates a new BinaryReader.
55
+ *
56
+ * @param data - The byte array to read from
57
+ * @param offset - Initial read position (default 0)
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * import { BinaryReader, fromHex } from '@btc-vision/bitcoin';
62
+ *
63
+ * const data = fromHex('01020304');
64
+ * const reader = new BinaryReader(data);
65
+ * ```
66
+ */
67
+ public constructor(data: Uint8Array, offset: number = 0) {
68
+ this.#data = data;
69
+ this.#view = new DataView(data.buffer, data.byteOffset, data.byteLength);
70
+ this.#offset = offset;
71
+ }
72
+
73
+ /**
74
+ * Creates a BinaryReader from a hex string.
75
+ *
76
+ * @param hex - Hex string (with or without 0x prefix)
77
+ * @returns A new BinaryReader instance
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * import { BinaryReader } from '@btc-vision/bitcoin';
82
+ *
83
+ * const reader = BinaryReader.fromHex('01000000');
84
+ * const version = reader.readInt32LE(); // 1
85
+ * ```
86
+ */
87
+ public static fromHex(hex: string): BinaryReader {
88
+ return new BinaryReader(fromHex(hex));
89
+ }
90
+
91
+ /**
92
+ * Current read position in the buffer.
93
+ */
94
+ public get offset(): number {
95
+ return this.#offset;
96
+ }
97
+
98
+ /**
99
+ * Sets the read position.
100
+ *
101
+ * @param value - New offset value
102
+ * @throws RangeError if offset is negative or beyond buffer length
103
+ */
104
+ public set offset(value: number) {
105
+ if (value < 0 || value > this.#data.length) {
106
+ throw new RangeError(`Offset ${value} is out of bounds [0, ${this.#data.length}]`);
107
+ }
108
+ this.#offset = value;
109
+ }
110
+
111
+ /**
112
+ * Total length of the underlying buffer.
113
+ */
114
+ public get length(): number {
115
+ return this.#data.length;
116
+ }
117
+
118
+ /**
119
+ * Number of bytes remaining to be read.
120
+ */
121
+ public get remaining(): number {
122
+ return this.#data.length - this.#offset;
123
+ }
124
+
125
+ /**
126
+ * The underlying data buffer.
127
+ */
128
+ public get data(): Uint8Array {
129
+ return this.#data;
130
+ }
131
+
132
+ /**
133
+ * Reads an 8-bit unsigned integer.
134
+ *
135
+ * @returns The value (0-255)
136
+ * @throws RangeError if reading past end of buffer
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * const reader = BinaryReader.fromHex('ff');
141
+ * reader.readUInt8(); // 255
142
+ * ```
143
+ */
144
+ public readUInt8(): number {
145
+ if (this.#offset >= this.#data.length) {
146
+ throw new RangeError('Read past end of buffer');
147
+ }
148
+ return this.#data[this.#offset++]!;
149
+ }
150
+
151
+ /**
152
+ * Reads an 8-bit signed integer.
153
+ *
154
+ * @returns The value (-128 to 127)
155
+ * @throws RangeError if reading past end of buffer
156
+ */
157
+ public readInt8(): number {
158
+ const value = this.readUInt8();
159
+ return value > 127 ? value - 256 : value;
160
+ }
161
+
162
+ /**
163
+ * Reads a 16-bit unsigned integer in little-endian format.
164
+ *
165
+ * @returns The value (0-65535)
166
+ * @throws RangeError if reading past end of buffer
167
+ *
168
+ * @example
169
+ * ```typescript
170
+ * const reader = BinaryReader.fromHex('0100'); // 1 in LE
171
+ * reader.readUInt16LE(); // 1
172
+ * ```
173
+ */
174
+ public readUInt16LE(): number {
175
+ if (this.#offset + 2 > this.#data.length) {
176
+ throw new RangeError('Read past end of buffer');
177
+ }
178
+ const value = this.#view.getUint16(this.#offset, true);
179
+ this.#offset += 2;
180
+ return value;
181
+ }
182
+
183
+ /**
184
+ * Reads a 16-bit signed integer in little-endian format.
185
+ *
186
+ * @returns The value (-32768 to 32767)
187
+ * @throws RangeError if reading past end of buffer
188
+ */
189
+ public readInt16LE(): number {
190
+ if (this.#offset + 2 > this.#data.length) {
191
+ throw new RangeError('Read past end of buffer');
192
+ }
193
+ const value = this.#view.getInt16(this.#offset, true);
194
+ this.#offset += 2;
195
+ return value;
196
+ }
197
+
198
+ /**
199
+ * Reads a 32-bit unsigned integer in little-endian format.
200
+ *
201
+ * @returns The value (0 to 4294967295)
202
+ * @throws RangeError if reading past end of buffer
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * const reader = BinaryReader.fromHex('01000000'); // 1 in LE
207
+ * reader.readUInt32LE(); // 1
208
+ * ```
209
+ */
210
+ public readUInt32LE(): number {
211
+ if (this.#offset + 4 > this.#data.length) {
212
+ throw new RangeError('Read past end of buffer');
213
+ }
214
+ const value = this.#view.getUint32(this.#offset, true);
215
+ this.#offset += 4;
216
+ return value;
217
+ }
218
+
219
+ /**
220
+ * Reads a 32-bit signed integer in little-endian format.
221
+ *
222
+ * @returns The value (-2147483648 to 2147483647)
223
+ * @throws RangeError if reading past end of buffer
224
+ *
225
+ * @example
226
+ * ```typescript
227
+ * const reader = BinaryReader.fromHex('ffffffff'); // -1 in LE signed
228
+ * reader.readInt32LE(); // -1
229
+ * ```
230
+ */
231
+ public readInt32LE(): number {
232
+ if (this.#offset + 4 > this.#data.length) {
233
+ throw new RangeError('Read past end of buffer');
234
+ }
235
+ const value = this.#view.getInt32(this.#offset, true);
236
+ this.#offset += 4;
237
+ return value;
238
+ }
239
+
240
+ /**
241
+ * Reads a 64-bit unsigned integer in little-endian format as bigint.
242
+ *
243
+ * @returns The value as bigint
244
+ * @throws RangeError if reading past end of buffer
245
+ *
246
+ * @example
247
+ * ```typescript
248
+ * const reader = BinaryReader.fromHex('0100000000000000'); // 1 in LE 64-bit
249
+ * reader.readUInt64LE(); // 1n
250
+ * ```
251
+ */
252
+ public readUInt64LE(): bigint {
253
+ if (this.#offset + 8 > this.#data.length) {
254
+ throw new RangeError('Read past end of buffer');
255
+ }
256
+ const value = this.#view.getBigUint64(this.#offset, true);
257
+ this.#offset += 8;
258
+ return value;
259
+ }
260
+
261
+ /**
262
+ * Reads a 64-bit signed integer in little-endian format as bigint.
263
+ *
264
+ * @returns The value as bigint
265
+ * @throws RangeError if reading past end of buffer
266
+ */
267
+ public readInt64LE(): bigint {
268
+ if (this.#offset + 8 > this.#data.length) {
269
+ throw new RangeError('Read past end of buffer');
270
+ }
271
+ const value = this.#view.getBigInt64(this.#offset, true);
272
+ this.#offset += 8;
273
+ return value;
274
+ }
275
+
276
+ /**
277
+ * Reads a specified number of bytes.
278
+ *
279
+ * Returns a subarray view (no copy) for performance.
280
+ * Use readBytesCopy() if you need an independent copy.
281
+ *
282
+ * @param length - Number of bytes to read
283
+ * @returns Uint8Array view into the buffer
284
+ * @throws RangeError if reading past end of buffer
285
+ *
286
+ * @example
287
+ * ```typescript
288
+ * const reader = BinaryReader.fromHex('deadbeefcafebabe');
289
+ * const first4 = reader.readBytes(4); // deadbeef
290
+ * const next4 = reader.readBytes(4); // cafebabe
291
+ * ```
292
+ */
293
+ public readBytes(length: number): Uint8Array {
294
+ if (this.#offset + length > this.#data.length) {
295
+ throw new RangeError('Read past end of buffer');
296
+ }
297
+ const value = this.#data.subarray(this.#offset, this.#offset + length);
298
+ this.#offset += length;
299
+ return value;
300
+ }
301
+
302
+ /**
303
+ * Reads a specified number of bytes as an independent copy.
304
+ *
305
+ * @param length - Number of bytes to read
306
+ * @returns New Uint8Array with copied data
307
+ * @throws RangeError if reading past end of buffer
308
+ */
309
+ public readBytesCopy(length: number): Uint8Array {
310
+ if (this.#offset + length > this.#data.length) {
311
+ throw new RangeError('Read past end of buffer');
312
+ }
313
+ const value = this.#data.slice(this.#offset, this.#offset + length);
314
+ this.#offset += length;
315
+ return value;
316
+ }
317
+
318
+ /**
319
+ * Reads a Bitcoin CompactSize variable-length integer.
320
+ *
321
+ * CompactSize encoding:
322
+ * - 0x00-0xFC: 1 byte (value as-is)
323
+ * - 0xFD: 3 bytes (0xFD + 2-byte LE uint16)
324
+ * - 0xFE: 5 bytes (0xFE + 4-byte LE uint32)
325
+ * - 0xFF: 9 bytes (0xFF + 8-byte LE uint64)
326
+ *
327
+ * @returns The decoded integer value
328
+ * @throws RangeError if reading past end of buffer
329
+ * @throws RangeError if value exceeds MAX_SAFE_INTEGER
330
+ *
331
+ * @example
332
+ * ```typescript
333
+ * const reader = BinaryReader.fromHex('fd0302'); // 515 encoded
334
+ * reader.readVarInt(); // 515
335
+ * ```
336
+ */
337
+ public readVarInt(): number {
338
+ const first = this.readUInt8();
339
+
340
+ if (first < 0xfd) {
341
+ return first;
342
+ }
343
+
344
+ if (first === 0xfd) {
345
+ return this.readUInt16LE();
346
+ }
347
+
348
+ if (first === 0xfe) {
349
+ return this.readUInt32LE();
350
+ }
351
+
352
+ // first === 0xff
353
+ const value = this.readUInt64LE();
354
+ if (value > BigInt(Number.MAX_SAFE_INTEGER)) {
355
+ throw new RangeError('VarInt value exceeds MAX_SAFE_INTEGER');
356
+ }
357
+ return Number(value);
358
+ }
359
+
360
+ /**
361
+ * Reads a Bitcoin CompactSize variable-length integer as bigint.
362
+ *
363
+ * Use this when you need the full 64-bit range.
364
+ *
365
+ * @returns The decoded integer value as bigint
366
+ * @throws RangeError if reading past end of buffer
367
+ */
368
+ public readVarIntBig(): bigint {
369
+ const first = this.readUInt8();
370
+
371
+ if (first < 0xfd) {
372
+ return BigInt(first);
373
+ }
374
+
375
+ if (first === 0xfd) {
376
+ return BigInt(this.readUInt16LE());
377
+ }
378
+
379
+ if (first === 0xfe) {
380
+ return BigInt(this.readUInt32LE());
381
+ }
382
+
383
+ // first === 0xff
384
+ return this.readUInt64LE();
385
+ }
386
+
387
+ /**
388
+ * Reads a length-prefixed byte array (VarInt length + bytes).
389
+ *
390
+ * @returns Uint8Array view into the buffer
391
+ * @throws RangeError if reading past end of buffer
392
+ *
393
+ * @example
394
+ * ```typescript
395
+ * const reader = BinaryReader.fromHex('04deadbeef');
396
+ * reader.readVarBytes(); // Uint8Array [0xde, 0xad, 0xbe, 0xef]
397
+ * ```
398
+ */
399
+ public readVarBytes(): Uint8Array {
400
+ const length = this.readVarInt();
401
+ return this.readBytes(length);
402
+ }
403
+
404
+ /**
405
+ * Reads an array of length-prefixed byte arrays.
406
+ *
407
+ * Format: VarInt count + (VarInt length + bytes) for each item.
408
+ *
409
+ * @returns Array of Uint8Array views
410
+ * @throws RangeError if reading past end of buffer
411
+ */
412
+ public readVector(): Uint8Array[] {
413
+ const count = this.readVarInt();
414
+ const result: Uint8Array[] = [];
415
+ for (let i = 0; i < count; i++) {
416
+ result.push(this.readVarBytes());
417
+ }
418
+ return result;
419
+ }
420
+
421
+ /**
422
+ * Peeks at the next byte without advancing the position.
423
+ *
424
+ * @returns The next byte value, or undefined if at end
425
+ */
426
+ public peek(): number | undefined {
427
+ if (this.#offset >= this.#data.length) {
428
+ return undefined;
429
+ }
430
+ return this.#data[this.#offset];
431
+ }
432
+
433
+ /**
434
+ * Skips a specified number of bytes.
435
+ *
436
+ * @param length - Number of bytes to skip
437
+ * @throws RangeError if skipping past end of buffer
438
+ */
439
+ public skip(length: number): void {
440
+ if (this.#offset + length > this.#data.length) {
441
+ throw new RangeError('Skip past end of buffer');
442
+ }
443
+ this.#offset += length;
444
+ }
445
+
446
+ /**
447
+ * Resets the read position to the beginning.
448
+ */
449
+ public reset(): void {
450
+ this.#offset = 0;
451
+ }
452
+
453
+ /**
454
+ * Checks if there are more bytes to read.
455
+ *
456
+ * @returns True if there are remaining bytes
457
+ */
458
+ public hasMore(): boolean {
459
+ return this.#offset < this.#data.length;
460
+ }
461
+ }