@btc-vision/bitcoin 6.5.6 → 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 (455) 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 +56 -9
  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 +12482 -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 +57 -10
  115. package/build/address.d.ts.map +1 -0
  116. package/build/address.js +80 -24
  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 +204 -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 +36 -9
  203. package/build/payments/bip341.d.ts.map +1 -0
  204. package/build/payments/bip341.js +35 -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 -152
  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 +429 -104
  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 +466 -144
  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 +113 -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 +411 -412
  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 +100 -36
  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 +175 -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 +66 -8
  332. package/scripts/bundle-ecc.ts +111 -0
  333. package/src/address.ts +81 -44
  334. package/src/bech32utils.ts +3 -3
  335. package/src/bip66.ts +34 -24
  336. package/src/block.ts +196 -84
  337. package/src/branded.ts +18 -0
  338. package/src/crypto.ts +64 -26
  339. package/src/ecc/context.ts +277 -0
  340. package/src/ecc/index.ts +14 -0
  341. package/src/ecc/types.ts +154 -0
  342. package/src/ecpair.d.ts +99 -0
  343. package/src/errors.ts +163 -0
  344. package/src/index.ts +113 -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 +34 -33
  355. package/src/payments/embed.ts +244 -41
  356. package/src/payments/index.ts +12 -10
  357. package/src/payments/p2ms.ts +490 -118
  358. package/src/payments/p2op.ts +431 -133
  359. package/src/payments/p2pk.ts +370 -72
  360. package/src/payments/p2pkh.ts +524 -130
  361. package/src/payments/p2sh.ts +572 -172
  362. package/src/payments/p2tr.ts +686 -194
  363. package/src/payments/p2wpkh.ts +484 -107
  364. package/src/payments/p2wsh.ts +526 -164
  365. package/src/payments/types.ts +80 -66
  366. package/src/psbt/bip371.ts +68 -51
  367. package/src/psbt/psbtutils.ts +39 -40
  368. package/src/psbt/types.ts +331 -0
  369. package/src/psbt/utils.ts +188 -0
  370. package/src/psbt/validation.ts +192 -0
  371. package/src/psbt.ts +566 -809
  372. package/src/pubkey.ts +22 -23
  373. package/src/push_data.ts +18 -16
  374. package/src/script.ts +82 -64
  375. package/src/script_number.ts +6 -6
  376. package/src/script_signature.ts +33 -36
  377. package/src/transaction.ts +458 -238
  378. package/src/types.ts +231 -100
  379. package/src/workers/WorkerSigningPool.node.ts +887 -0
  380. package/src/workers/WorkerSigningPool.ts +670 -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 +332 -0
  384. package/src/workers/signing-worker.ts +353 -0
  385. package/src/workers/types.ts +413 -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/vite.config.browser.ts +3 -42
  421. package/vitest.config.integration.ts +2 -0
  422. package/browser/bufferutils.d.ts +0 -34
  423. package/browser/chunks/crypto-BhCpKpek.js +0 -2033
  424. package/browser/chunks/payments-B1wlSccx.js +0 -1089
  425. package/browser/chunks/psbt-BCNk7JUx.js +0 -4055
  426. package/browser/chunks/script-DyPItFEl.js +0 -318
  427. package/browser/chunks/transaction-C_UbhMGn.js +0 -432
  428. package/browser/chunks/utils-DNZi-T5W.js +0 -761
  429. package/browser/ecc_lib.d.ts +0 -3
  430. package/browser/hooks/AdvancedSignatureManager.d.ts +0 -16
  431. package/browser/hooks/HookedSigner.d.ts +0 -4
  432. package/browser/hooks/SignatureManager.d.ts +0 -13
  433. package/browser/payments/lazy.d.ts +0 -2
  434. package/browser/typeforce.d.ts +0 -38
  435. package/build/bufferutils.d.ts +0 -34
  436. package/build/bufferutils.js +0 -141
  437. package/build/ecc_lib.d.ts +0 -3
  438. package/build/ecc_lib.js +0 -61
  439. package/build/hooks/AdvancedSignatureManager.d.ts +0 -16
  440. package/build/hooks/AdvancedSignatureManager.js +0 -52
  441. package/build/hooks/HookedSigner.d.ts +0 -4
  442. package/build/hooks/HookedSigner.js +0 -64
  443. package/build/hooks/SignatureManager.d.ts +0 -13
  444. package/build/hooks/SignatureManager.js +0 -45
  445. package/build/payments/lazy.d.ts +0 -2
  446. package/build/payments/lazy.js +0 -28
  447. package/build/tsconfig.tsbuildinfo +0 -1
  448. package/src/bufferutils.ts +0 -188
  449. package/src/ecc_lib.ts +0 -94
  450. package/src/hooks/AdvancedSignatureManager.ts +0 -104
  451. package/src/hooks/HookedSigner.ts +0 -108
  452. package/src/hooks/SignatureManager.ts +0 -84
  453. package/src/payments/lazy.ts +0 -28
  454. package/src/typeforce.d.ts +0 -38
  455. 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
  }