@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
@@ -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 { type P2PKPayment, type PaymentOpts, PaymentType } 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
+ /**
242
+ * Converts to a plain P2PKPayment object for backwards compatibility.
243
+ *
244
+ * @returns A P2PKPayment object
245
+ */
246
+ toPayment(): P2PKPayment {
247
+ return {
248
+ name: this.name,
249
+ network: this.network,
250
+ pubkey: this.pubkey,
251
+ signature: this.signature,
252
+ output: this.output,
253
+ input: this.input,
254
+ witness: this.witness,
255
+ };
256
+ }
257
+
258
+ #computePubkey(): PublicKey | undefined {
259
+ if (this.#inputPubkey) {
260
+ return this.#inputPubkey as PublicKey;
261
+ }
262
+ if (this.#inputOutput) {
263
+ // Extract pubkey from output: {pubkey} OP_CHECKSIG
264
+ return this.#inputOutput.subarray(1, -1) as PublicKey;
265
+ }
266
+ return undefined;
267
+ }
268
+
269
+ #computeSignature(): Signature | undefined {
270
+ if (this.#inputSignature) {
271
+ return this.#inputSignature as Signature;
272
+ }
273
+ if (this.#inputInput) {
274
+ const chunks = bscript.decompile(this.#inputInput);
275
+ if (chunks && chunks.length > 0) {
276
+ return chunks[0] as Signature;
277
+ }
278
+ }
279
+ return undefined;
280
+ }
281
+
282
+ #computeOutput(): Script | undefined {
283
+ if (this.#inputOutput) {
284
+ return this.#inputOutput as Script;
285
+ }
286
+ const pubkey = this.#inputPubkey;
287
+ if (pubkey) {
288
+ return bscript.compile([pubkey, OPS.OP_CHECKSIG]) as Script;
289
+ }
290
+ return undefined;
291
+ }
292
+
293
+ #computeInput(): Script | undefined {
294
+ if (this.#inputInput) {
295
+ return this.#inputInput as Script;
296
+ }
297
+ const signature = this.#inputSignature;
298
+ if (signature) {
299
+ return bscript.compile([signature]) as Script;
300
+ }
301
+ return undefined;
302
+ }
303
+
304
+ // Validation
305
+
306
+ #computeWitness(): Uint8Array[] | undefined {
307
+ if (this.input) {
308
+ return [];
309
+ }
310
+ return undefined;
311
+ }
312
+
313
+ #validate(): void {
314
+ if (this.#inputOutput) {
315
+ if (this.#inputOutput[this.#inputOutput.length - 1] !== OPS.OP_CHECKSIG) {
76
316
  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');
317
+ }
318
+ const extractedPubkey = this.pubkey;
319
+ if (!isPoint(extractedPubkey)) {
320
+ throw new TypeError('Output pubkey is invalid');
321
+ }
322
+ if (
323
+ this.#inputPubkey &&
324
+ extractedPubkey &&
325
+ !equals(this.#inputPubkey, extractedPubkey)
326
+ ) {
327
+ throw new TypeError('Pubkey mismatch');
328
+ }
79
329
  }
80
330
 
81
- if (a.signature) {
82
- if (a.input && !a.input.equals(o.input!)) throw new TypeError('Signature mismatch');
331
+ if (this.#inputSignature) {
332
+ const computedInput = this.input;
333
+ if (this.#inputInput && computedInput && !equals(this.#inputInput, computedInput)) {
334
+ throw new TypeError('Signature mismatch');
335
+ }
83
336
  }
84
337
 
85
- if (a.input) {
86
- if (_chunks().length !== 1) throw new TypeError('Input is invalid');
87
- if (!bscript.isCanonicalScriptSignature(o.signature!))
338
+ if (this.#inputInput) {
339
+ const chunks = bscript.decompile(this.#inputInput);
340
+ if (!chunks || chunks.length !== 1) {
341
+ throw new TypeError('Input is invalid');
342
+ }
343
+ const sig = this.signature;
344
+ if (!sig || !bscript.isCanonicalScriptSignature(sig)) {
88
345
  throw new TypeError('Input has invalid signature');
346
+ }
89
347
  }
90
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
+ );
91
388
 
92
- return Object.assign(o, a);
389
+ // Return a merged object for backwards compatibility
390
+ return Object.assign(instance.toPayment(), a);
93
391
  }