@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
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,13 +10,25 @@ 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';
17
17
  import * as script from './script.js';
18
18
  import * as crypto from './crypto.js';
19
19
  import * as Transaction from './transaction.js';
20
+ // Custom error types
21
+ import {
22
+ AddressError,
23
+ BitcoinError,
24
+ EccError,
25
+ InvalidInputError,
26
+ InvalidOutputError,
27
+ PsbtError,
28
+ ScriptError,
29
+ SignatureError,
30
+ ValidationError,
31
+ } from './errors.js';
20
32
 
21
33
  export * as address from './address.js';
22
34
  export * as crypto from './crypto.js';
@@ -31,10 +43,12 @@ export * from './psbt.js';
31
43
  /** @hidden */
32
44
  export { opcodes } from './opcodes.js';
33
45
  export { Transaction } from './transaction.js';
46
+ export type { TaprootHashCache } from './transaction.js';
34
47
  /** @hidden */
35
48
  export type { Network } from './networks.js';
36
49
  /** @hidden */
37
- export { initEccLib } from './ecc_lib.js';
50
+ export { initEccLib, getEccLib, EccContext } from './ecc/context.js';
51
+ export type { EccLib } from './ecc/types.js';
38
52
  export { PaymentType } from './payments/index.js';
39
53
  export type {
40
54
  Payment,
@@ -79,18 +93,107 @@ export interface PsbtInputUpdate extends _PsbtInputUpdate {}
79
93
 
80
94
  export * from './psbt/bip371.js';
81
95
  export * from './address.js';
82
- export * from './bufferutils.js';
96
+ export {
97
+ toHex,
98
+ fromHex,
99
+ isHex,
100
+ concat,
101
+ equals,
102
+ compare,
103
+ isZero,
104
+ clone,
105
+ reverse,
106
+ reverseCopy,
107
+ alloc,
108
+ xor,
109
+ fromUtf8,
110
+ toUtf8,
111
+ MemoryPool,
112
+ SimpleMemoryPool,
113
+ varuint,
114
+ } from './io/index.js';
83
115
  export * from './payments/bip341.js';
84
116
  export * from './psbt/psbtutils.js';
85
- export { toXOnly, decompressPublicKey, pubkeysMatch, type UncompressedPublicKey } from './pubkey.js';
117
+ export {
118
+ toXOnly,
119
+ decompressPublicKey,
120
+ pubkeysMatch,
121
+ type UncompressedPublicKey,
122
+ } from './pubkey.js';
86
123
 
87
124
  export { TAPLEAF_VERSION_MASK } from './types.js';
125
+ export type { Taptree, Tapleaf } from './types.js';
88
126
  export type {
89
- Taptree,
90
- XOnlyPointAddTweakResult,
91
- Tapleaf,
92
- TinySecp256k1Interface,
127
+ Bytes32,
128
+ Bytes20,
129
+ PublicKey,
130
+ XOnlyPublicKey,
131
+ Satoshi,
132
+ PrivateKey,
133
+ Signature,
134
+ SchnorrSignature,
135
+ Script,
136
+ } from './types.js';
137
+ export {
138
+ isPrivateKey,
139
+ isSchnorrSignature,
140
+ isSignature,
141
+ isScript,
142
+ isBytes32,
143
+ isBytes20,
144
+ isPoint,
145
+ isXOnlyPublicKey,
146
+ isSatoshi,
147
+ assertXOnlyPublicKey,
148
+ assertPrivateKey,
149
+ toBytes32,
150
+ toBytes20,
151
+ toSatoshi,
93
152
  } from './types.js';
153
+ export type { XOnlyPointAddTweakResult } from './ecc/types.js';
154
+
155
+ export {
156
+ BitcoinError,
157
+ ValidationError,
158
+ InvalidInputError,
159
+ InvalidOutputError,
160
+ ScriptError,
161
+ PsbtError,
162
+ EccError,
163
+ AddressError,
164
+ SignatureError,
165
+ };
166
+
167
+ /** All error classes grouped as a namespace */
168
+ export const errors = {
169
+ BitcoinError,
170
+ ValidationError,
171
+ InvalidInputError,
172
+ InvalidOutputError,
173
+ ScriptError,
174
+ PsbtError,
175
+ EccError,
176
+ AddressError,
177
+ SignatureError,
178
+ } as const;
179
+
180
+ // Worker-based parallel signing
181
+ export * as workers from './workers/index.js';
182
+ export {
183
+ WorkerSigningPool,
184
+ getSigningPool,
185
+ SignatureType,
186
+ createSigningPool,
187
+ signPsbtParallel,
188
+ } from './workers/index.js';
189
+ export type {
190
+ WorkerPoolConfig,
191
+ SigningTask,
192
+ ParallelSignerKeyPair,
193
+ ParallelSigningResult,
194
+ ParallelSignOptions,
195
+ PsbtParallelKeyPair,
196
+ } from './workers/index.js';
94
197
 
95
198
  const bitcoin = {
96
199
  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
+ * Current read position in the buffer.
75
+ */
76
+ public get offset(): number {
77
+ return this.#offset;
78
+ }
79
+
80
+ /**
81
+ * Sets the read position.
82
+ *
83
+ * @param value - New offset value
84
+ * @throws RangeError if offset is negative or beyond buffer length
85
+ */
86
+ public set offset(value: number) {
87
+ if (value < 0 || value > this.#data.length) {
88
+ throw new RangeError(`Offset ${value} is out of bounds [0, ${this.#data.length}]`);
89
+ }
90
+ this.#offset = value;
91
+ }
92
+
93
+ /**
94
+ * Total length of the underlying buffer.
95
+ */
96
+ public get length(): number {
97
+ return this.#data.length;
98
+ }
99
+
100
+ /**
101
+ * Number of bytes remaining to be read.
102
+ */
103
+ public get remaining(): number {
104
+ return this.#data.length - this.#offset;
105
+ }
106
+
107
+ /**
108
+ * The underlying data buffer.
109
+ */
110
+ public get data(): Uint8Array {
111
+ return this.#data;
112
+ }
113
+
114
+ /**
115
+ * Creates a BinaryReader from a hex string.
116
+ *
117
+ * @param hex - Hex string (with or without 0x prefix)
118
+ * @returns A new BinaryReader instance
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * import { BinaryReader } from '@btc-vision/bitcoin';
123
+ *
124
+ * const reader = BinaryReader.fromHex('01000000');
125
+ * const version = reader.readInt32LE(); // 1
126
+ * ```
127
+ */
128
+ public static fromHex(hex: string): BinaryReader {
129
+ return new BinaryReader(fromHex(hex));
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
+ }