@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
@@ -0,0 +1,277 @@
1
+ /**
2
+ * ECC library context management with dependency injection.
3
+ * Provides initialization, access, and lifecycle management for the ECC library.
4
+ *
5
+ * @packageDocumentation
6
+ */
7
+ import type { EccLib } from './types.js';
8
+ import { fromHex, equals } from '../io/index.js';
9
+ import type { Bytes32, XOnlyPublicKey } from '../types.js';
10
+
11
+ /**
12
+ * Context class for managing the ECC library instance.
13
+ * Uses dependency injection pattern instead of global singleton.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * import { EccContext } from '@btc-vision/bitcoin';
18
+ * import * as secp256k1 from 'tiny-secp256k1';
19
+ *
20
+ * // Initialize once at app startup
21
+ * EccContext.init(secp256k1);
22
+ *
23
+ * // Get instance anywhere in your code
24
+ * const ecc = EccContext.get();
25
+ *
26
+ * // Clear when done (optional, for testing)
27
+ * EccContext.clear();
28
+ * ```
29
+ */
30
+ export class EccContext {
31
+ static #instance: EccContext | undefined;
32
+ readonly #lib: EccLib;
33
+
34
+ private constructor(lib: EccLib) {
35
+ this.#lib = lib;
36
+ }
37
+
38
+ /**
39
+ * Initializes the ECC context with the provided library.
40
+ * The library is verified before being set as active.
41
+ *
42
+ * @param lib - The ECC library instance to initialize
43
+ * @returns The initialized EccContext instance
44
+ * @throws Error if the ECC library fails verification
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * import { EccContext } from '@btc-vision/bitcoin';
49
+ * import * as secp256k1 from 'tiny-secp256k1';
50
+ *
51
+ * const context = EccContext.init(secp256k1);
52
+ * ```
53
+ */
54
+ static init(lib: EccLib): EccContext {
55
+ verifyEcc(lib);
56
+ EccContext.#instance = new EccContext(lib);
57
+ return EccContext.#instance;
58
+ }
59
+
60
+ /**
61
+ * Gets the initialized ECC context.
62
+ *
63
+ * @returns The EccContext instance
64
+ * @throws Error if the context has not been initialized
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * import { EccContext } from '@btc-vision/bitcoin';
69
+ *
70
+ * const context = EccContext.get();
71
+ * const isValid = context.lib.isXOnlyPoint(someKey);
72
+ * ```
73
+ */
74
+ static get(): EccContext {
75
+ if (!EccContext.#instance) {
76
+ throw new Error(
77
+ 'ECC library not initialized. Call EccContext.init() or initEccLib() first.',
78
+ );
79
+ }
80
+ return EccContext.#instance;
81
+ }
82
+
83
+ /**
84
+ * Clears the ECC context.
85
+ * Useful for testing or when reinitializing with a different library.
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * import { EccContext } from '@btc-vision/bitcoin';
90
+ *
91
+ * EccContext.clear();
92
+ * // Context is now uninitialized
93
+ * ```
94
+ */
95
+ static clear(): void {
96
+ EccContext.#instance = undefined;
97
+ }
98
+
99
+ /**
100
+ * Checks if the ECC context has been initialized.
101
+ *
102
+ * @returns True if initialized
103
+ *
104
+ * @example
105
+ * ```typescript
106
+ * import { EccContext } from '@btc-vision/bitcoin';
107
+ *
108
+ * if (!EccContext.isInitialized()) {
109
+ * EccContext.init(secp256k1);
110
+ * }
111
+ * ```
112
+ */
113
+ static isInitialized(): boolean {
114
+ return EccContext.#instance !== undefined;
115
+ }
116
+
117
+ /**
118
+ * The underlying ECC library instance.
119
+ */
120
+ get lib(): EccLib {
121
+ return this.#lib;
122
+ }
123
+ }
124
+
125
+ /**
126
+ * Initializes the ECC library with the provided instance.
127
+ * This is a convenience function that wraps EccContext.init().
128
+ * Pass `undefined` to clear the library.
129
+ *
130
+ * @param eccLib - The ECC library instance to initialize, or undefined to clear
131
+ * @throws Error if the ECC library fails verification
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * import { initEccLib } from '@btc-vision/bitcoin';
136
+ * import * as secp256k1 from 'tiny-secp256k1';
137
+ *
138
+ * // Initialize the ECC library
139
+ * initEccLib(secp256k1);
140
+ *
141
+ * // Clear the library
142
+ * initEccLib(undefined);
143
+ * ```
144
+ */
145
+ export function initEccLib(eccLib: EccLib | undefined): void {
146
+ if (eccLib === undefined) {
147
+ EccContext.clear();
148
+ return;
149
+ }
150
+ EccContext.init(eccLib);
151
+ }
152
+
153
+ /**
154
+ * Retrieves the initialized ECC library instance.
155
+ * This is a convenience function that wraps EccContext.get().lib.
156
+ *
157
+ * @returns The ECC library instance
158
+ * @throws Error if the ECC library has not been initialized
159
+ *
160
+ * @example
161
+ * ```typescript
162
+ * import { getEccLib, initEccLib } from '@btc-vision/bitcoin';
163
+ * import * as secp256k1 from 'tiny-secp256k1';
164
+ *
165
+ * initEccLib(secp256k1);
166
+ *
167
+ * const ecc = getEccLib();
168
+ * const isValid = ecc.isXOnlyPoint(somePublicKey);
169
+ * ```
170
+ */
171
+ export function getEccLib(): EccLib {
172
+ return EccContext.get().lib;
173
+ }
174
+
175
+ // ============================================================================
176
+ // Verification
177
+ // ============================================================================
178
+
179
+ interface TweakAddVector {
180
+ pubkey: string;
181
+ tweak: string;
182
+ parity: 0 | 1 | -1;
183
+ result: string | null;
184
+ }
185
+
186
+ const TWEAK_ADD_VECTORS: TweakAddVector[] = [
187
+ {
188
+ pubkey: '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
189
+ tweak: 'fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140',
190
+ parity: -1,
191
+ result: null,
192
+ },
193
+ {
194
+ pubkey: '1617d38ed8d8657da4d4761e8057bc396ea9e4b9d29776d4be096016dbd2509b',
195
+ tweak: 'a8397a935f0dfceba6ba9618f6451ef4d80637abf4e6af2669fbc9de6a8fd2ac',
196
+ parity: 1,
197
+ result: 'e478f99dab91052ab39a33ea35fd5e6e4933f4d28023cd597c9a1f6760346adf',
198
+ },
199
+ {
200
+ pubkey: '2c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e668680991',
201
+ tweak: '823c3cd2142744b075a87eade7e1b8678ba308d566226a0056ca2b7a76f86b47',
202
+ parity: 0,
203
+ result: '9534f8dc8c6deda2dc007655981c78b49c5d96c778fbf363462a11ec9dfd948c',
204
+ },
205
+ ];
206
+
207
+ /**
208
+ * Verifies that the ECC library implementation is correct.
209
+ * Tests `isXOnlyPoint` and `xOnlyPointAddTweak` with known test vectors.
210
+ *
211
+ * @param ecc - The ECC library to verify
212
+ * @throws Error if any verification test fails
213
+ */
214
+ function verifyEcc(ecc: EccLib): void {
215
+ if (typeof ecc.isXOnlyPoint !== 'function') {
216
+ throw new Error('ECC library missing isXOnlyPoint function');
217
+ }
218
+
219
+ // Test isXOnlyPoint with valid points
220
+ const validPoints = [
221
+ '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
222
+ 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffeeffffc2e',
223
+ 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
224
+ '0000000000000000000000000000000000000000000000000000000000000001',
225
+ ];
226
+
227
+ for (const hex of validPoints) {
228
+ if (!ecc.isXOnlyPoint(fromHex(hex))) {
229
+ throw new Error(`ECC library isXOnlyPoint failed for valid point: ${hex}`);
230
+ }
231
+ }
232
+
233
+ // Test isXOnlyPoint with invalid points
234
+ const invalidPoints = [
235
+ '0000000000000000000000000000000000000000000000000000000000000000',
236
+ 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f',
237
+ ];
238
+
239
+ for (const hex of invalidPoints) {
240
+ if (ecc.isXOnlyPoint(fromHex(hex))) {
241
+ throw new Error(`ECC library isXOnlyPoint should reject invalid point: ${hex}`);
242
+ }
243
+ }
244
+
245
+ // Test xOnlyPointAddTweak
246
+ if (typeof ecc.xOnlyPointAddTweak !== 'function') {
247
+ throw new Error('ECC library missing xOnlyPointAddTweak function');
248
+ }
249
+
250
+ for (const vector of TWEAK_ADD_VECTORS) {
251
+ const result = ecc.xOnlyPointAddTweak(fromHex(vector.pubkey) as XOnlyPublicKey, fromHex(vector.tweak) as Bytes32);
252
+
253
+ if (vector.result === null) {
254
+ if (result !== null) {
255
+ throw new Error(
256
+ `ECC library xOnlyPointAddTweak should return null for: ${vector.pubkey}`,
257
+ );
258
+ }
259
+ } else {
260
+ if (result === null) {
261
+ throw new Error(
262
+ `ECC library xOnlyPointAddTweak returned null unexpectedly for: ${vector.pubkey}`,
263
+ );
264
+ }
265
+ if (result.parity !== vector.parity) {
266
+ throw new Error(
267
+ `ECC library xOnlyPointAddTweak parity mismatch for: ${vector.pubkey}`,
268
+ );
269
+ }
270
+ if (!equals(result.xOnlyPubkey, fromHex(vector.result))) {
271
+ throw new Error(
272
+ `ECC library xOnlyPointAddTweak result mismatch for: ${vector.pubkey}`,
273
+ );
274
+ }
275
+ }
276
+ }
277
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * ECC (Elliptic Curve Cryptography) module.
3
+ *
4
+ * Provides dependency injection for the secp256k1 elliptic curve library
5
+ * required for Taproot (BIP340/BIP341) operations.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+
10
+ // Core types
11
+ export type { EccLib, XOnlyPointAddTweakResult, Parity } from './types.js';
12
+
13
+ // Context management
14
+ export { EccContext, initEccLib, getEccLib } from './context.js';
@@ -0,0 +1,154 @@
1
+ /**
2
+ * ECC (Elliptic Curve Cryptography) type definitions.
3
+ * Defines interfaces for secp256k1 operations used in Taproot and signatures.
4
+ *
5
+ * @packageDocumentation
6
+ */
7
+
8
+ import type {
9
+ Bytes32,
10
+ PrivateKey,
11
+ PublicKey,
12
+ Signature,
13
+ SchnorrSignature,
14
+ XOnlyPublicKey,
15
+ } from '../branded.js';
16
+
17
+ /**
18
+ * Parity of the y-coordinate for an x-only public key.
19
+ * - 0: even y-coordinate
20
+ * - 1: odd y-coordinate
21
+ */
22
+ export type Parity = 0 | 1;
23
+
24
+ /**
25
+ * Result of x-only point addition with tweak.
26
+ */
27
+ export interface XOnlyPointAddTweakResult {
28
+ /** Parity of the resulting y-coordinate (0 = even, 1 = odd) */
29
+ readonly parity: Parity;
30
+ /** The resulting x-only public key */
31
+ readonly xOnlyPubkey: XOnlyPublicKey;
32
+ }
33
+
34
+ /**
35
+ * Interface for the ECC library used by this library.
36
+ * This is compatible with tiny-secp256k1 and @noble/secp256k1.
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * import { EccLib, initEccLib } from '@btc-vision/bitcoin';
41
+ * import * as secp256k1 from 'tiny-secp256k1';
42
+ *
43
+ * // tiny-secp256k1 implements EccLib
44
+ * const ecc: EccLib = secp256k1;
45
+ * initEccLib(ecc);
46
+ * ```
47
+ */
48
+ export interface EccLib {
49
+ /**
50
+ * Checks if a 32-byte value is a valid x-only public key.
51
+ *
52
+ * @param p - 32-byte x-coordinate
53
+ * @returns True if the point is valid on the secp256k1 curve
54
+ */
55
+ isXOnlyPoint(p: Uint8Array): boolean;
56
+
57
+ /**
58
+ * Adds a tweak to an x-only public key.
59
+ *
60
+ * @param p - 32-byte x-only public key
61
+ * @param tweak - 32-byte scalar to add
62
+ * @returns The tweaked public key with parity, or null if result is invalid
63
+ */
64
+ xOnlyPointAddTweak(p: XOnlyPublicKey, tweak: Bytes32): XOnlyPointAddTweakResult | null;
65
+
66
+ /**
67
+ * Signs a 32-byte message hash with a private key (ECDSA).
68
+ * Optional - only needed for signing operations.
69
+ *
70
+ * @param hash - 32-byte message hash
71
+ * @param privateKey - 32-byte private key
72
+ * @returns DER-encoded signature
73
+ */
74
+ sign?(hash: Bytes32, privateKey: PrivateKey): Signature;
75
+
76
+ /**
77
+ * Signs a 32-byte message hash with a private key (Schnorr/BIP340).
78
+ * Optional - only needed for Taproot key-path signing.
79
+ *
80
+ * @param hash - 32-byte message hash
81
+ * @param privateKey - 32-byte private key
82
+ * @returns 64-byte Schnorr signature
83
+ */
84
+ signSchnorr?(hash: Bytes32, privateKey: PrivateKey): SchnorrSignature;
85
+
86
+ /**
87
+ * Verifies an ECDSA signature.
88
+ * Optional - only needed for signature verification.
89
+ *
90
+ * @param hash - 32-byte message hash
91
+ * @param publicKey - 33 or 65-byte public key
92
+ * @param signature - DER-encoded signature
93
+ * @returns True if signature is valid
94
+ */
95
+ verify?(hash: Bytes32, publicKey: PublicKey, signature: Signature): boolean;
96
+
97
+ /**
98
+ * Verifies a Schnorr/BIP340 signature.
99
+ * Optional - only needed for Taproot signature verification.
100
+ *
101
+ * @param hash - 32-byte message hash
102
+ * @param publicKey - 32-byte x-only public key
103
+ * @param signature - 64-byte Schnorr signature
104
+ * @returns True if signature is valid
105
+ */
106
+ verifySchnorr?(hash: Bytes32, publicKey: XOnlyPublicKey, signature: SchnorrSignature): boolean;
107
+
108
+ /**
109
+ * Derives a public key from a private key.
110
+ * Optional - only needed for key derivation.
111
+ *
112
+ * @param privateKey - 32-byte private key
113
+ * @param compressed - Whether to return compressed (33-byte) or uncompressed (65-byte)
114
+ * @returns The public key, or null if private key is invalid
115
+ */
116
+ pointFromScalar?(privateKey: PrivateKey, compressed?: boolean): PublicKey | null;
117
+
118
+ /**
119
+ * Computes the x-only public key from a private key.
120
+ * Optional - only needed for Taproot key derivation.
121
+ *
122
+ * @param privateKey - 32-byte private key
123
+ * @returns 32-byte x-only public key, or null if private key is invalid
124
+ */
125
+ xOnlyPointFromScalar?(privateKey: PrivateKey): XOnlyPublicKey | null;
126
+
127
+ /**
128
+ * Converts a full public key to x-only format.
129
+ * Optional - only needed when working with x-only keys.
130
+ *
131
+ * @param pubkey - 33 or 65-byte public key
132
+ * @returns 32-byte x-only public key
133
+ */
134
+ xOnlyPointFromPoint?(pubkey: PublicKey): XOnlyPublicKey;
135
+
136
+ /**
137
+ * Adds a scalar to a private key.
138
+ * Optional - only needed for key tweaking.
139
+ *
140
+ * @param privateKey - 32-byte private key
141
+ * @param tweak - 32-byte scalar to add
142
+ * @returns The tweaked private key, or null if result is invalid
143
+ */
144
+ privateAdd?(privateKey: PrivateKey, tweak: Bytes32): PrivateKey | null;
145
+
146
+ /**
147
+ * Negates a private key.
148
+ * Optional - only needed for Taproot parity handling.
149
+ *
150
+ * @param privateKey - 32-byte private key
151
+ * @returns The negated private key
152
+ */
153
+ privateNegate?(privateKey: PrivateKey): PrivateKey;
154
+ }
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Ambient module declaration for ecpair.
3
+ *
4
+ * The upstream ecpair@3 .d.ts files depend on valibot@^0.37 type-level APIs.
5
+ * When a different valibot major is hoisted (e.g. v1.x required by bip32),
6
+ * @typescript-eslint resolves valibot from the project root instead of
7
+ * ecpair's nested node_modules, turning every ecpair type into an error type.
8
+ *
9
+ * This local declaration re-exports the subset of ecpair's public API that
10
+ * this project actually uses, without any valibot dependency.
11
+ */
12
+ declare module 'ecpair' {
13
+ interface Network {
14
+ messagePrefix: string | Uint8Array;
15
+ bech32: string;
16
+ bip32: {
17
+ public: number;
18
+ private: number;
19
+ };
20
+ pubKeyHash: number;
21
+ scriptHash: number;
22
+ wif: number;
23
+ }
24
+
25
+ interface Signer {
26
+ publicKey: Uint8Array;
27
+ network?: unknown;
28
+ sign(hash: Uint8Array, lowR?: boolean): Uint8Array;
29
+ }
30
+
31
+ interface SignerAsync {
32
+ publicKey: Uint8Array;
33
+ network?: unknown;
34
+ sign(hash: Uint8Array, lowR?: boolean): Promise<Uint8Array>;
35
+ }
36
+
37
+ interface ECPairInterface extends Signer {
38
+ compressed: boolean;
39
+ network: Network;
40
+ lowR: boolean;
41
+ privateKey?: Uint8Array;
42
+ toWIF(): string;
43
+ tweak(t: Uint8Array): ECPairInterface;
44
+ verify(hash: Uint8Array, signature: Uint8Array): boolean;
45
+ verifySchnorr(hash: Uint8Array, signature: Uint8Array): boolean;
46
+ signSchnorr(hash: Uint8Array): Uint8Array;
47
+ }
48
+
49
+ interface ECPairOptions {
50
+ compressed?: boolean;
51
+ network?: Network;
52
+ rng?: (arg?: number) => Uint8Array;
53
+ }
54
+
55
+ interface ECPairAPI {
56
+ isPoint(maybePoint: unknown): boolean;
57
+ fromPrivateKey(buffer: Uint8Array, options?: ECPairOptions): ECPairInterface;
58
+ fromPublicKey(buffer: Uint8Array, options?: ECPairOptions): ECPairInterface;
59
+ fromWIF(wifString: string, network?: Network | Network[]): ECPairInterface;
60
+ makeRandom(options?: ECPairOptions): ECPairInterface;
61
+ }
62
+
63
+ interface TinySecp256k1Interface {
64
+ isPoint(p: Uint8Array): boolean;
65
+ pointCompress(p: Uint8Array, compressed?: boolean): Uint8Array;
66
+ isPrivate(d: Uint8Array): boolean;
67
+ pointFromScalar(d: Uint8Array, compressed?: boolean): Uint8Array | null;
68
+ xOnlyPointAddTweak(
69
+ p: Uint8Array,
70
+ tweak: Uint8Array,
71
+ ): { parity: 1 | 0; xOnlyPubkey: Uint8Array } | null;
72
+ privateAdd(d: Uint8Array, tweak: Uint8Array): Uint8Array | null;
73
+ privateNegate(d: Uint8Array): Uint8Array;
74
+ sign(h: Uint8Array, d: Uint8Array, e?: Uint8Array): Uint8Array;
75
+ signSchnorr?(h: Uint8Array, d: Uint8Array, e?: Uint8Array): Uint8Array;
76
+ verify(h: Uint8Array, Q: Uint8Array, signature: Uint8Array, strict?: boolean): boolean;
77
+ verifySchnorr?(h: Uint8Array, Q: Uint8Array, signature: Uint8Array): boolean;
78
+ }
79
+
80
+ const networks: {
81
+ bitcoin: Network;
82
+ testnet: Network;
83
+ };
84
+
85
+ function ECPairFactory(ecc: TinySecp256k1Interface): ECPairAPI;
86
+ export default ECPairFactory;
87
+
88
+ export {
89
+ ECPairFactory,
90
+ Signer,
91
+ SignerAsync,
92
+ ECPairAPI,
93
+ ECPairInterface,
94
+ ECPairOptions,
95
+ TinySecp256k1Interface,
96
+ Network,
97
+ networks,
98
+ };
99
+ }
package/src/errors.ts ADDED
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Custom error types for the Bitcoin library.
3
+ * @packageDocumentation
4
+ */
5
+
6
+ /**
7
+ * Base error class for all Bitcoin-related errors.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { BitcoinError } from '@btc-vision/bitcoin';
12
+ *
13
+ * if (error instanceof BitcoinError) {
14
+ * console.log('Bitcoin library error:', error.message);
15
+ * }
16
+ * ```
17
+ */
18
+ export class BitcoinError extends Error {
19
+ constructor(message: string) {
20
+ super(message);
21
+ this.name = 'BitcoinError';
22
+ // Maintains proper stack trace for where error was thrown (V8 engines)
23
+ if (Error.captureStackTrace) {
24
+ Error.captureStackTrace(this, BitcoinError);
25
+ }
26
+ }
27
+ }
28
+
29
+ /**
30
+ * Error thrown when input validation fails.
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * import { ValidationError } from '@btc-vision/bitcoin';
35
+ *
36
+ * throw new ValidationError('Invalid public key length');
37
+ * ```
38
+ */
39
+ export class ValidationError extends BitcoinError {
40
+ constructor(message: string) {
41
+ super(message);
42
+ this.name = 'ValidationError';
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Error thrown when an invalid input is provided to a transaction.
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * import { InvalidInputError } from '@btc-vision/bitcoin';
52
+ *
53
+ * throw new InvalidInputError('Input index out of range');
54
+ * ```
55
+ */
56
+ export class InvalidInputError extends BitcoinError {
57
+ constructor(message: string) {
58
+ super(message);
59
+ this.name = 'InvalidInputError';
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Error thrown when an invalid output is provided to a transaction.
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * import { InvalidOutputError } from '@btc-vision/bitcoin';
69
+ *
70
+ * throw new InvalidOutputError('Output value exceeds maximum');
71
+ * ```
72
+ */
73
+ export class InvalidOutputError extends BitcoinError {
74
+ constructor(message: string) {
75
+ super(message);
76
+ this.name = 'InvalidOutputError';
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Error thrown when a script operation fails.
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * import { ScriptError } from '@btc-vision/bitcoin';
86
+ *
87
+ * throw new ScriptError('Failed to decompile script');
88
+ * ```
89
+ */
90
+ export class ScriptError extends BitcoinError {
91
+ constructor(message: string) {
92
+ super(message);
93
+ this.name = 'ScriptError';
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Error thrown when a PSBT operation fails.
99
+ *
100
+ * @example
101
+ * ```typescript
102
+ * import { PsbtError } from '@btc-vision/bitcoin';
103
+ *
104
+ * throw new PsbtError('Cannot finalize unsigned input');
105
+ * ```
106
+ */
107
+ export class PsbtError extends BitcoinError {
108
+ constructor(message: string) {
109
+ super(message);
110
+ this.name = 'PsbtError';
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Error thrown when ECC library is not initialized.
116
+ *
117
+ * @example
118
+ * ```typescript
119
+ * import { EccError } from '@btc-vision/bitcoin';
120
+ *
121
+ * throw new EccError('ECC library must be initialized before use');
122
+ * ```
123
+ */
124
+ export class EccError extends BitcoinError {
125
+ constructor(message: string) {
126
+ super(message);
127
+ this.name = 'EccError';
128
+ }
129
+ }
130
+
131
+ /**
132
+ * Error thrown when address encoding/decoding fails.
133
+ *
134
+ * @example
135
+ * ```typescript
136
+ * import { AddressError } from '@btc-vision/bitcoin';
137
+ *
138
+ * throw new AddressError('Invalid address checksum');
139
+ * ```
140
+ */
141
+ export class AddressError extends BitcoinError {
142
+ constructor(message: string) {
143
+ super(message);
144
+ this.name = 'AddressError';
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Error thrown when signature operations fail.
150
+ *
151
+ * @example
152
+ * ```typescript
153
+ * import { SignatureError } from '@btc-vision/bitcoin';
154
+ *
155
+ * throw new SignatureError('Invalid signature format');
156
+ * ```
157
+ */
158
+ export class SignatureError extends BitcoinError {
159
+ constructor(message: string) {
160
+ super(message);
161
+ this.name = 'SignatureError';
162
+ }
163
+ }