@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
@@ -1,93 +1,391 @@
1
- import { bitcoin as BITCOIN_NETWORK } from '../networks.js';
1
+ /**
2
+ * Pay-to-Public-Key (P2PK) payment class.
3
+ *
4
+ * P2PK is one of the simplest Bitcoin payment types where the output script
5
+ * contains a public key directly, and spending requires a signature from that key.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+
10
+ import { bitcoin as BITCOIN_NETWORK, type Network } from '../networks.js';
2
11
  import * as bscript from '../script.js';
3
- import { isPoint, typeforce as typef, type StackFunction } from '../types.js';
4
- import { P2PKPayment, PaymentOpts, PaymentType } from './types.js';
5
- import * as lazy from './lazy.js';
12
+ import { isPoint, type PublicKey, type Script, type Signature } from '../types.js';
13
+ import { equals } from '../io/index.js';
14
+ import { PaymentType, type P2PKPayment, type PaymentOpts } from './types.js';
6
15
 
7
16
  const OPS = bscript.opcodes;
8
17
 
9
- // input: {signature}
10
- // output: {pubKey} OP_CHECKSIG
11
18
  /**
12
- * Creates a pay-to-public-key (P2PK) payment object.
19
+ * Pay-to-Public-Key (P2PK) payment class.
20
+ *
21
+ * Creates locking scripts of the form: `{pubKey} OP_CHECKSIG`
22
+ * Spending requires providing: `{signature}`
13
23
  *
14
- * @param a - The payment object containing the necessary data.
15
- * @param opts - Optional payment options.
16
- * @returns The P2PK payment object.
17
- * @throws {TypeError} If the required data is not provided or if the data is invalid.
24
+ * @example
25
+ * ```typescript
26
+ * import { P2PK } from '@btc-vision/bitcoin';
27
+ *
28
+ * // Create from public key
29
+ * const payment = P2PK.fromPubkey(pubkey);
30
+ * console.log(payment.output); // scriptPubKey
31
+ *
32
+ * // Create from output script
33
+ * const decoded = P2PK.fromOutput(scriptPubKey);
34
+ * console.log(decoded.pubkey); // extracted public key
35
+ *
36
+ * // Legacy factory function still works
37
+ * const legacy = p2pk({ pubkey });
38
+ * ```
18
39
  */
19
- export function p2pk(a: Omit<P2PKPayment, 'name'>, opts?: PaymentOpts): P2PKPayment {
20
- if (!a.input && !a.output && !a.pubkey && !a.input && !a.signature)
21
- throw new TypeError('Not enough data');
22
- opts = Object.assign({ validate: true }, opts || {});
40
+ export class P2PK {
41
+ // Static public fields
42
+ static readonly NAME = PaymentType.P2PK;
23
43
 
24
- typef(
25
- {
26
- network: typef.maybe(typef.Object),
27
- output: typef.maybe(typef.Buffer),
28
- pubkey: typef.maybe(isPoint),
44
+ // Private instance fields
45
+ readonly #network: Network;
46
+ readonly #opts: Required<PaymentOpts>;
47
+
48
+ // Input data (provided by user)
49
+ #inputPubkey?: Uint8Array | undefined;
50
+ #inputSignature?: Uint8Array | undefined;
51
+ #inputOutput?: Uint8Array | undefined;
52
+ #inputInput?: Uint8Array | undefined;
53
+
54
+ // Cached computed values
55
+ #pubkey?: Uint8Array | undefined;
56
+ #signature?: Uint8Array | undefined;
57
+ #output?: Uint8Array | undefined;
58
+ #input?: Uint8Array | undefined;
59
+ #witness?: Uint8Array[] | undefined;
29
60
 
30
- signature: typef.maybe(bscript.isCanonicalScriptSignature),
31
- input: typef.maybe(typef.Buffer),
61
+ // Cache flags
62
+ #pubkeyComputed = false;
63
+ #signatureComputed = false;
64
+ #outputComputed = false;
65
+ #inputComputed = false;
66
+ #witnessComputed = false;
67
+
68
+ /**
69
+ * Creates a new P2PK payment instance.
70
+ *
71
+ * @param params - Payment parameters
72
+ * @param params.pubkey - The public key (33 or 65 bytes)
73
+ * @param params.signature - DER-encoded signature
74
+ * @param params.output - The scriptPubKey
75
+ * @param params.input - The scriptSig
76
+ * @param params.network - Network parameters (defaults to mainnet)
77
+ * @param opts - Payment options
78
+ * @param opts.validate - Whether to validate inputs (default: true)
79
+ *
80
+ * @throws {TypeError} If validation is enabled and data is invalid
81
+ */
82
+ constructor(
83
+ params: {
84
+ pubkey?: Uint8Array | undefined;
85
+ signature?: Uint8Array | undefined;
86
+ output?: Uint8Array | undefined;
87
+ input?: Uint8Array | undefined;
88
+ network?: Network | undefined;
32
89
  },
33
- a,
34
- );
90
+ opts?: PaymentOpts,
91
+ ) {
92
+ this.#network = params.network ?? BITCOIN_NETWORK;
93
+ this.#opts = {
94
+ validate: opts?.validate ?? true,
95
+ allowIncomplete: opts?.allowIncomplete ?? false,
96
+ };
97
+
98
+ // Store input data
99
+ this.#inputPubkey = params.pubkey;
100
+ this.#inputSignature = params.signature;
101
+ this.#inputOutput = params.output;
102
+ this.#inputInput = params.input;
103
+
104
+ // Validate if requested
105
+ if (this.#opts.validate) {
106
+ this.#validate();
107
+ }
108
+ }
109
+
110
+ // Public getters
111
+
112
+ /**
113
+ * Payment type discriminant.
114
+ */
115
+ get name(): typeof PaymentType.P2PK {
116
+ return PaymentType.P2PK;
117
+ }
118
+
119
+ /**
120
+ * Network parameters.
121
+ */
122
+ get network(): Network {
123
+ return this.#network;
124
+ }
125
+
126
+ /**
127
+ * The public key (33 or 65 bytes).
128
+ * Computed lazily from output if not provided directly.
129
+ */
130
+ get pubkey(): PublicKey | undefined {
131
+ if (!this.#pubkeyComputed) {
132
+ this.#pubkey = this.#computePubkey();
133
+ this.#pubkeyComputed = true;
134
+ }
135
+ return this.#pubkey as PublicKey | undefined;
136
+ }
137
+
138
+ /**
139
+ * The DER-encoded signature.
140
+ * Computed lazily from input if not provided directly.
141
+ */
142
+ get signature(): Signature | undefined {
143
+ if (!this.#signatureComputed) {
144
+ this.#signature = this.#computeSignature();
145
+ this.#signatureComputed = true;
146
+ }
147
+ return this.#signature as Signature | undefined;
148
+ }
149
+
150
+ /**
151
+ * The scriptPubKey: `{pubKey} OP_CHECKSIG`
152
+ * Computed lazily from pubkey if not provided directly.
153
+ */
154
+ get output(): Script | undefined {
155
+ if (!this.#outputComputed) {
156
+ this.#output = this.#computeOutput();
157
+ this.#outputComputed = true;
158
+ }
159
+ return this.#output as Script | undefined;
160
+ }
161
+
162
+ /**
163
+ * The scriptSig: `{signature}`
164
+ * Computed lazily from signature if not provided directly.
165
+ */
166
+ get input(): Script | undefined {
167
+ if (!this.#inputComputed) {
168
+ this.#input = this.#computeInput();
169
+ this.#inputComputed = true;
170
+ }
171
+ return this.#input as Script | undefined;
172
+ }
173
+
174
+ /**
175
+ * Witness stack (empty for P2PK as it's not a SegWit type).
176
+ */
177
+ get witness(): Uint8Array[] | undefined {
178
+ if (!this.#witnessComputed) {
179
+ this.#witness = this.#computeWitness();
180
+ this.#witnessComputed = true;
181
+ }
182
+ return this.#witness;
183
+ }
184
+
185
+ // Static factory methods
186
+
187
+ /**
188
+ * Creates a P2PK payment from a public key.
189
+ *
190
+ * @param pubkey - The public key (33 or 65 bytes)
191
+ * @param network - Network parameters (defaults to mainnet)
192
+ * @returns A new P2PK payment instance
193
+ *
194
+ * @example
195
+ * ```typescript
196
+ * const payment = P2PK.fromPubkey(pubkey);
197
+ * const scriptPubKey = payment.output;
198
+ * ```
199
+ */
200
+ static fromPubkey(pubkey: PublicKey, network?: Network): P2PK {
201
+ return new P2PK({ pubkey, network });
202
+ }
35
203
 
36
- const _chunks = lazy.value(() => {
37
- return bscript.decompile(a.input!);
38
- }) as StackFunction;
39
-
40
- const network = a.network || BITCOIN_NETWORK;
41
- const o: P2PKPayment = {
42
- name: PaymentType.P2PK,
43
- network,
44
- pubkey: undefined,
45
- };
46
-
47
- lazy.prop(o, 'output', () => {
48
- if (!a.pubkey) return;
49
- return bscript.compile([a.pubkey, OPS.OP_CHECKSIG]);
50
- });
51
-
52
- lazy.prop(o, 'pubkey', () => {
53
- if (!a.output) return;
54
- return a.output.subarray(1, -1);
55
- });
56
-
57
- lazy.prop(o, 'signature', () => {
58
- if (!a.input) return;
59
- return _chunks()[0] as Buffer;
60
- });
61
-
62
- lazy.prop(o, 'input', () => {
63
- if (!a.signature) return;
64
- return bscript.compile([a.signature]);
65
- });
66
-
67
- lazy.prop(o, 'witness', () => {
68
- if (!o.input) return;
69
- return [];
70
- });
71
-
72
- // extended validation
73
- if (opts.validate) {
74
- if (a.output) {
75
- if (a.output[a.output.length - 1] !== OPS.OP_CHECKSIG)
204
+ /**
205
+ * Creates a P2PK payment from a scriptPubKey.
206
+ *
207
+ * @param output - The scriptPubKey
208
+ * @param network - Network parameters (defaults to mainnet)
209
+ * @returns A new P2PK payment instance
210
+ *
211
+ * @example
212
+ * ```typescript
213
+ * const payment = P2PK.fromOutput(scriptPubKey);
214
+ * const pubkey = payment.pubkey;
215
+ * ```
216
+ */
217
+ static fromOutput(output: Uint8Array, network?: Network): P2PK {
218
+ return new P2PK({ output, network });
219
+ }
220
+
221
+ /**
222
+ * Creates a P2PK payment from a signature (for spending).
223
+ *
224
+ * @param signature - The DER-encoded signature
225
+ * @param pubkey - The public key (optional, for validation)
226
+ * @param network - Network parameters (defaults to mainnet)
227
+ * @returns A new P2PK payment instance
228
+ *
229
+ * @example
230
+ * ```typescript
231
+ * const payment = P2PK.fromSignature(signature, pubkey);
232
+ * const scriptSig = payment.input;
233
+ * ```
234
+ */
235
+ static fromSignature(signature: Signature, pubkey?: PublicKey, network?: Network): P2PK {
236
+ return new P2PK({ signature, pubkey, network });
237
+ }
238
+
239
+ // Private computation methods
240
+
241
+ #computePubkey(): PublicKey | undefined {
242
+ if (this.#inputPubkey) {
243
+ return this.#inputPubkey as PublicKey;
244
+ }
245
+ if (this.#inputOutput) {
246
+ // Extract pubkey from output: {pubkey} OP_CHECKSIG
247
+ return this.#inputOutput.subarray(1, -1) as PublicKey;
248
+ }
249
+ return undefined;
250
+ }
251
+
252
+ #computeSignature(): Signature | undefined {
253
+ if (this.#inputSignature) {
254
+ return this.#inputSignature as Signature;
255
+ }
256
+ if (this.#inputInput) {
257
+ const chunks = bscript.decompile(this.#inputInput);
258
+ if (chunks && chunks.length > 0) {
259
+ return chunks[0] as Signature;
260
+ }
261
+ }
262
+ return undefined;
263
+ }
264
+
265
+ #computeOutput(): Script | undefined {
266
+ if (this.#inputOutput) {
267
+ return this.#inputOutput as Script;
268
+ }
269
+ const pubkey = this.#inputPubkey;
270
+ if (pubkey) {
271
+ return bscript.compile([pubkey, OPS.OP_CHECKSIG]) as Script;
272
+ }
273
+ return undefined;
274
+ }
275
+
276
+ #computeInput(): Script | undefined {
277
+ if (this.#inputInput) {
278
+ return this.#inputInput as Script;
279
+ }
280
+ const signature = this.#inputSignature;
281
+ if (signature) {
282
+ return bscript.compile([signature]) as Script;
283
+ }
284
+ return undefined;
285
+ }
286
+
287
+ #computeWitness(): Uint8Array[] | undefined {
288
+ if (this.input) {
289
+ return [];
290
+ }
291
+ return undefined;
292
+ }
293
+
294
+ // Validation
295
+
296
+ #validate(): void {
297
+ if (this.#inputOutput) {
298
+ if (this.#inputOutput[this.#inputOutput.length - 1] !== OPS.OP_CHECKSIG) {
76
299
  throw new TypeError('Output is invalid');
77
- if (!isPoint(o.pubkey)) throw new TypeError('Output pubkey is invalid');
78
- if (a.pubkey && !a.pubkey.equals(o.pubkey!)) throw new TypeError('Pubkey mismatch');
300
+ }
301
+ const extractedPubkey = this.pubkey;
302
+ if (!isPoint(extractedPubkey)) {
303
+ throw new TypeError('Output pubkey is invalid');
304
+ }
305
+ if (
306
+ this.#inputPubkey &&
307
+ extractedPubkey &&
308
+ !equals(this.#inputPubkey, extractedPubkey)
309
+ ) {
310
+ throw new TypeError('Pubkey mismatch');
311
+ }
79
312
  }
80
313
 
81
- if (a.signature) {
82
- if (a.input && !a.input.equals(o.input!)) throw new TypeError('Signature mismatch');
314
+ if (this.#inputSignature) {
315
+ const computedInput = this.input;
316
+ if (this.#inputInput && computedInput && !equals(this.#inputInput, computedInput)) {
317
+ throw new TypeError('Signature mismatch');
318
+ }
83
319
  }
84
320
 
85
- if (a.input) {
86
- if (_chunks().length !== 1) throw new TypeError('Input is invalid');
87
- if (!bscript.isCanonicalScriptSignature(o.signature!))
321
+ if (this.#inputInput) {
322
+ const chunks = bscript.decompile(this.#inputInput);
323
+ if (!chunks || chunks.length !== 1) {
324
+ throw new TypeError('Input is invalid');
325
+ }
326
+ const sig = this.signature;
327
+ if (!sig || !bscript.isCanonicalScriptSignature(sig)) {
88
328
  throw new TypeError('Input has invalid signature');
329
+ }
89
330
  }
90
331
  }
91
332
 
92
- return Object.assign(o, a);
333
+ /**
334
+ * Converts to a plain P2PKPayment object for backwards compatibility.
335
+ *
336
+ * @returns A P2PKPayment object
337
+ */
338
+ toPayment(): P2PKPayment {
339
+ return {
340
+ name: this.name,
341
+ network: this.network,
342
+ pubkey: this.pubkey,
343
+ signature: this.signature,
344
+ output: this.output,
345
+ input: this.input,
346
+ witness: this.witness,
347
+ };
348
+ }
349
+ }
350
+
351
+ /**
352
+ * Creates a Pay-to-Public-Key (P2PK) payment object.
353
+ *
354
+ * This is the legacy factory function for backwards compatibility.
355
+ * For new code, prefer using the P2PK class directly.
356
+ *
357
+ * @param a - The payment object containing the necessary data
358
+ * @param opts - Optional payment options
359
+ * @returns The P2PK payment object
360
+ * @throws {TypeError} If the required data is not provided or if the data is invalid
361
+ *
362
+ * @example
363
+ * ```typescript
364
+ * import { p2pk } from '@btc-vision/bitcoin';
365
+ *
366
+ * // Create from public key
367
+ * const payment = p2pk({ pubkey });
368
+ *
369
+ * // Create from output
370
+ * const decoded = p2pk({ output: scriptPubKey });
371
+ * ```
372
+ */
373
+ export function p2pk(a: Omit<P2PKPayment, 'name'>, opts?: PaymentOpts): P2PKPayment {
374
+ if (!a.input && !a.output && !a.pubkey && !a.signature) {
375
+ throw new TypeError('Not enough data');
376
+ }
377
+
378
+ const instance = new P2PK(
379
+ {
380
+ pubkey: a.pubkey,
381
+ signature: a.signature,
382
+ output: a.output,
383
+ input: a.input,
384
+ network: a.network,
385
+ },
386
+ opts,
387
+ );
388
+
389
+ // Return a merged object for backwards compatibility
390
+ return Object.assign(instance.toPayment(), a);
93
391
  }