@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,88 +1,386 @@
1
+ /**
2
+ * Pay-to-Public-Key-Hash (P2PKH) payment class.
3
+ *
4
+ * P2PKH is the most common legacy Bitcoin payment type. The output script
5
+ * contains the hash of a public key, and spending requires the full public key
6
+ * and a valid signature.
7
+ *
8
+ * @packageDocumentation
9
+ */
1
10
  import * as bs58check from 'bs58check';
2
11
  import * as bcrypto from '../crypto.js';
3
12
  import { bitcoin as BITCOIN_NETWORK } from '../networks.js';
4
13
  import { decompressPublicKey } from '../pubkey.js';
5
14
  import * as bscript from '../script.js';
6
- import { isPoint, typeforce as typef } from '../types.js';
15
+ import { isPoint } from '../types.js';
16
+ import { alloc, equals } from '../io/index.js';
7
17
  import { PaymentType } from './types.js';
8
- import * as lazy from './lazy.js';
9
18
  const OPS = bscript.opcodes;
10
- export function p2pkh(a, opts) {
11
- if (!a.address && !a.hash && !a.output && !a.pubkey && !a.input) {
12
- throw new TypeError('Not enough data');
19
+ /**
20
+ * Pay-to-Public-Key-Hash (P2PKH) payment class.
21
+ *
22
+ * Creates locking scripts of the form:
23
+ * `OP_DUP OP_HASH160 {hash160(pubkey)} OP_EQUALVERIFY OP_CHECKSIG`
24
+ *
25
+ * Spending requires providing: `{signature} {pubkey}`
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * import { P2PKH } from '@btc-vision/bitcoin';
30
+ *
31
+ * // Create from public key
32
+ * const payment = P2PKH.fromPubkey(pubkey);
33
+ * console.log(payment.address); // Bitcoin address
34
+ * console.log(payment.output); // scriptPubKey
35
+ *
36
+ * // Create from address
37
+ * const fromAddr = P2PKH.fromAddress('1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2');
38
+ * console.log(fromAddr.hash); // 20-byte pubkey hash
39
+ *
40
+ * // Create from hash
41
+ * const fromHash = P2PKH.fromHash(hash160);
42
+ * console.log(fromHash.address);
43
+ * ```
44
+ */
45
+ export class P2PKH {
46
+ // Static public fields
47
+ static NAME = PaymentType.P2PKH;
48
+ // Private instance fields
49
+ #network;
50
+ #opts;
51
+ // Input data (provided by user)
52
+ #inputAddress;
53
+ #inputHash;
54
+ #inputPubkey;
55
+ #inputSignature;
56
+ #inputOutput;
57
+ #inputInput;
58
+ // Hybrid/uncompressed key flags
59
+ #useHybrid = false;
60
+ #useUncompressed = false;
61
+ // Cached computed values
62
+ #address;
63
+ #hash;
64
+ #pubkey;
65
+ #signature;
66
+ #output;
67
+ #input;
68
+ #witness;
69
+ // Cache flags
70
+ #addressComputed = false;
71
+ #hashComputed = false;
72
+ #pubkeyComputed = false;
73
+ #signatureComputed = false;
74
+ #outputComputed = false;
75
+ #inputComputed = false;
76
+ #witnessComputed = false;
77
+ // Decoded address cache
78
+ #decodedAddress;
79
+ #decodedAddressComputed = false;
80
+ // Decoded input chunks cache
81
+ #inputChunks;
82
+ #inputChunksComputed = false;
83
+ /**
84
+ * Creates a new P2PKH payment instance.
85
+ *
86
+ * @param params - Payment parameters
87
+ * @param params.address - Base58Check encoded address
88
+ * @param params.hash - 20-byte pubkey hash (RIPEMD160(SHA256(pubkey)))
89
+ * @param params.pubkey - The public key (33 or 65 bytes)
90
+ * @param params.signature - DER-encoded signature
91
+ * @param params.output - The scriptPubKey
92
+ * @param params.input - The scriptSig
93
+ * @param params.network - Network parameters (defaults to mainnet)
94
+ * @param opts - Payment options
95
+ * @param opts.validate - Whether to validate inputs (default: true)
96
+ *
97
+ * @throws {TypeError} If validation is enabled and data is invalid
98
+ */
99
+ constructor(params, opts) {
100
+ this.#network = params.network ?? BITCOIN_NETWORK;
101
+ this.#opts = {
102
+ validate: opts?.validate ?? true,
103
+ allowIncomplete: opts?.allowIncomplete ?? false,
104
+ };
105
+ // Store input data
106
+ this.#inputAddress = params.address;
107
+ this.#inputHash = params.hash;
108
+ this.#inputPubkey = params.pubkey;
109
+ this.#inputSignature = params.signature;
110
+ this.#inputOutput = params.output;
111
+ this.#inputInput = params.input;
112
+ this.#useHybrid = params.useHybrid ?? false;
113
+ this.#useUncompressed = params.useUncompressed ?? false;
114
+ // Validate if requested
115
+ if (this.#opts.validate) {
116
+ this.#validate();
117
+ }
118
+ }
119
+ // Public getters
120
+ /**
121
+ * Payment type discriminant.
122
+ */
123
+ get name() {
124
+ return PaymentType.P2PKH;
125
+ }
126
+ /**
127
+ * Network parameters.
128
+ */
129
+ get network() {
130
+ return this.#network;
131
+ }
132
+ /**
133
+ * Base58Check encoded Bitcoin address.
134
+ */
135
+ get address() {
136
+ if (!this.#addressComputed) {
137
+ this.#address = this.#computeAddress();
138
+ this.#addressComputed = true;
139
+ }
140
+ return this.#address;
141
+ }
142
+ /**
143
+ * 20-byte pubkey hash (RIPEMD160(SHA256(pubkey))).
144
+ */
145
+ get hash() {
146
+ if (!this.#hashComputed) {
147
+ this.#hash = this.#computeHash();
148
+ this.#hashComputed = true;
149
+ }
150
+ return this.#hash;
151
+ }
152
+ /**
153
+ * The public key (33 or 65 bytes).
154
+ */
155
+ get pubkey() {
156
+ if (!this.#pubkeyComputed) {
157
+ this.#pubkey = this.#computePubkey();
158
+ this.#pubkeyComputed = true;
159
+ }
160
+ return this.#pubkey;
161
+ }
162
+ /**
163
+ * The DER-encoded signature.
164
+ */
165
+ get signature() {
166
+ if (!this.#signatureComputed) {
167
+ this.#signature = this.#computeSignature();
168
+ this.#signatureComputed = true;
169
+ }
170
+ return this.#signature;
171
+ }
172
+ /**
173
+ * The scriptPubKey:
174
+ * `OP_DUP OP_HASH160 {hash} OP_EQUALVERIFY OP_CHECKSIG`
175
+ */
176
+ get output() {
177
+ if (!this.#outputComputed) {
178
+ this.#output = this.#computeOutput();
179
+ this.#outputComputed = true;
180
+ }
181
+ return this.#output;
182
+ }
183
+ /**
184
+ * The scriptSig: `{signature} {pubkey}`
185
+ */
186
+ get input() {
187
+ if (!this.#inputComputed) {
188
+ this.#input = this.#computeInput();
189
+ this.#inputComputed = true;
190
+ }
191
+ return this.#input;
13
192
  }
14
- opts = Object.assign({ validate: true }, opts || {});
15
- typef({
16
- network: typef.maybe(typef.Object),
17
- address: typef.maybe(typef.String),
18
- hash: typef.maybe(typef.BufferN(20)),
19
- output: typef.maybe(typef.BufferN(25)),
20
- pubkey: typef.maybe(isPoint),
21
- signature: typef.maybe(bscript.isCanonicalScriptSignature),
22
- input: typef.maybe(typef.Buffer),
23
- }, a);
24
- const _address = lazy.value(() => {
25
- const payload = Buffer.from(bs58check.default.decode(a.address));
26
- const version = payload.readUInt8(0);
27
- const hash = payload.subarray(1);
28
- return { version, hash };
29
- });
30
- const _chunks = lazy.value(() => {
31
- return bscript.decompile(a.input);
32
- });
33
- const network = a.network || BITCOIN_NETWORK;
34
- const o = {
35
- name: PaymentType.P2PKH,
36
- network,
37
- hash: undefined,
38
- };
39
- lazy.prop(o, 'address', () => {
40
- if (!o.hash)
41
- return;
42
- const payload = Buffer.allocUnsafe(21);
43
- payload.writeUInt8(network.pubKeyHash, 0);
44
- o.hash.copy(payload, 1);
193
+ /**
194
+ * Witness stack (empty for P2PKH as it's not a SegWit type).
195
+ */
196
+ get witness() {
197
+ if (!this.#witnessComputed) {
198
+ this.#witness = this.#computeWitness();
199
+ this.#witnessComputed = true;
200
+ }
201
+ return this.#witness;
202
+ }
203
+ // Static factory methods
204
+ /**
205
+ * Creates a P2PKH payment from a public key.
206
+ *
207
+ * @param pubkey - The public key (33 or 65 bytes)
208
+ * @param network - Network parameters (defaults to mainnet)
209
+ * @returns A new P2PKH payment instance
210
+ *
211
+ * @example
212
+ * ```typescript
213
+ * const payment = P2PKH.fromPubkey(pubkey);
214
+ * const address = payment.address;
215
+ * ```
216
+ */
217
+ static fromPubkey(pubkey, network) {
218
+ return new P2PKH({ pubkey, network });
219
+ }
220
+ /**
221
+ * Creates a P2PKH payment from a Base58Check address.
222
+ *
223
+ * @param address - Base58Check encoded address
224
+ * @param network - Network parameters (defaults to mainnet)
225
+ * @returns A new P2PKH payment instance
226
+ *
227
+ * @example
228
+ * ```typescript
229
+ * const payment = P2PKH.fromAddress('1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2');
230
+ * const hash = payment.hash;
231
+ * ```
232
+ */
233
+ static fromAddress(address, network) {
234
+ return new P2PKH({ address, network });
235
+ }
236
+ /**
237
+ * Creates a P2PKH payment from a 20-byte pubkey hash.
238
+ *
239
+ * @param hash - 20-byte pubkey hash
240
+ * @param network - Network parameters (defaults to mainnet)
241
+ * @returns A new P2PKH payment instance
242
+ *
243
+ * @example
244
+ * ```typescript
245
+ * const payment = P2PKH.fromHash(hash160);
246
+ * const address = payment.address;
247
+ * ```
248
+ */
249
+ static fromHash(hash, network) {
250
+ return new P2PKH({ hash, network });
251
+ }
252
+ /**
253
+ * Creates a P2PKH payment from a scriptPubKey.
254
+ *
255
+ * @param output - The scriptPubKey
256
+ * @param network - Network parameters (defaults to mainnet)
257
+ * @returns A new P2PKH payment instance
258
+ */
259
+ static fromOutput(output, network) {
260
+ return new P2PKH({ output, network });
261
+ }
262
+ // Private helper methods
263
+ /**
264
+ * Converts to a plain P2PKHPayment object for backwards compatibility.
265
+ *
266
+ * @returns A P2PKHPayment object
267
+ */
268
+ toPayment() {
269
+ return {
270
+ name: this.name,
271
+ network: this.network,
272
+ address: this.address,
273
+ hash: this.hash,
274
+ pubkey: this.pubkey,
275
+ signature: this.signature,
276
+ output: this.output,
277
+ input: this.input,
278
+ witness: this.witness,
279
+ };
280
+ }
281
+ #getDecodedAddress() {
282
+ if (!this.#decodedAddressComputed) {
283
+ if (this.#inputAddress) {
284
+ const payload = new Uint8Array(bs58check.default.decode(this.#inputAddress));
285
+ this.#decodedAddress = {
286
+ version: payload[0],
287
+ hash: payload.subarray(1),
288
+ };
289
+ }
290
+ this.#decodedAddressComputed = true;
291
+ }
292
+ return this.#decodedAddress;
293
+ }
294
+ // Private computation methods
295
+ #getInputChunks() {
296
+ if (!this.#inputChunksComputed) {
297
+ if (this.#inputInput) {
298
+ this.#inputChunks = bscript.decompile(this.#inputInput) ?? undefined;
299
+ }
300
+ this.#inputChunksComputed = true;
301
+ }
302
+ return this.#inputChunks;
303
+ }
304
+ #computeAddress() {
305
+ if (this.#inputAddress) {
306
+ return this.#inputAddress;
307
+ }
308
+ const h = this.hash;
309
+ if (!h)
310
+ return undefined;
311
+ const payload = alloc(21);
312
+ payload[0] = this.#network.pubKeyHash;
313
+ payload.set(h, 1);
45
314
  return bs58check.default.encode(payload);
46
- });
47
- lazy.prop(o, 'hash', () => {
48
- if (a.output)
49
- return a.output.subarray(3, 23);
50
- if (a.address)
51
- return _address().hash;
52
- if (a.pubkey || o.pubkey)
53
- return bcrypto.hash160(a.pubkey || o.pubkey);
54
- });
55
- lazy.prop(o, 'output', () => {
56
- if (!o.hash)
57
- return;
315
+ }
316
+ #computeHash() {
317
+ if (this.#inputHash) {
318
+ return this.#inputHash;
319
+ }
320
+ if (this.#inputOutput) {
321
+ return this.#inputOutput.subarray(3, 23);
322
+ }
323
+ if (this.#inputAddress) {
324
+ return this.#getDecodedAddress()?.hash;
325
+ }
326
+ // Use the pubkey getter to derive pubkey from input if available
327
+ const pk = this.pubkey;
328
+ if (pk) {
329
+ return bcrypto.hash160(pk);
330
+ }
331
+ return undefined;
332
+ }
333
+ #computePubkey() {
334
+ if (this.#inputPubkey) {
335
+ return this.#inputPubkey;
336
+ }
337
+ if (this.#inputInput) {
338
+ const chunks = this.#getInputChunks();
339
+ if (chunks && chunks.length >= 2) {
340
+ return chunks[1];
341
+ }
342
+ }
343
+ return undefined;
344
+ }
345
+ #computeSignature() {
346
+ if (this.#inputSignature) {
347
+ return this.#inputSignature;
348
+ }
349
+ if (this.#inputInput) {
350
+ const chunks = this.#getInputChunks();
351
+ if (chunks && chunks.length >= 1) {
352
+ return chunks[0];
353
+ }
354
+ }
355
+ return undefined;
356
+ }
357
+ #computeOutput() {
358
+ if (this.#inputOutput) {
359
+ return this.#inputOutput;
360
+ }
361
+ const h = this.hash;
362
+ if (!h)
363
+ return undefined;
58
364
  return bscript.compile([
59
365
  OPS.OP_DUP,
60
366
  OPS.OP_HASH160,
61
- o.hash,
367
+ h,
62
368
  OPS.OP_EQUALVERIFY,
63
369
  OPS.OP_CHECKSIG,
64
370
  ]);
65
- });
66
- lazy.prop(o, 'pubkey', () => {
67
- if (!a.input)
68
- return;
69
- return _chunks()[1];
70
- });
71
- lazy.prop(o, 'signature', () => {
72
- if (!a.input)
73
- return;
74
- return _chunks()[0];
75
- });
76
- lazy.prop(o, 'input', () => {
77
- if (!a.pubkey)
78
- return;
79
- if (!a.signature)
80
- return;
81
- let pubKey = a.pubkey;
82
- if (a.useHybrid || a.useUncompressed) {
83
- const decompressed = decompressPublicKey(a.pubkey);
371
+ }
372
+ #computeInput() {
373
+ if (this.#inputInput) {
374
+ return this.#inputInput;
375
+ }
376
+ if (!this.#inputPubkey || !this.#inputSignature) {
377
+ return undefined;
378
+ }
379
+ let pubKey = this.#inputPubkey;
380
+ if (this.#useHybrid || this.#useUncompressed) {
381
+ const decompressed = decompressPublicKey(this.#inputPubkey);
84
382
  if (decompressed) {
85
- if (a.useUncompressed) {
383
+ if (this.#useUncompressed) {
86
384
  pubKey = decompressed.uncompressed;
87
385
  }
88
386
  else {
@@ -90,66 +388,75 @@ export function p2pkh(a, opts) {
90
388
  }
91
389
  }
92
390
  }
93
- return bscript.compile([a.signature, pubKey]);
94
- });
95
- lazy.prop(o, 'witness', () => {
96
- if (!o.input)
97
- return;
98
- return [];
99
- });
100
- if (opts.validate) {
101
- let hash = Buffer.from([]);
102
- if (a.address) {
103
- if (_address().version !== network.pubKeyHash) {
391
+ return bscript.compile([this.#inputSignature, pubKey]);
392
+ }
393
+ // Validation
394
+ #computeWitness() {
395
+ if (this.input) {
396
+ return [];
397
+ }
398
+ return undefined;
399
+ }
400
+ #validate() {
401
+ let hash = new Uint8Array(0);
402
+ if (this.#inputAddress) {
403
+ const addr = this.#getDecodedAddress();
404
+ if (!addr) {
405
+ throw new TypeError('Invalid address');
406
+ }
407
+ if (addr.version !== this.#network.pubKeyHash) {
104
408
  throw new TypeError('Invalid version or Network mismatch');
105
409
  }
106
- if (_address().hash.length !== 20) {
410
+ if (addr.hash.length !== 20) {
107
411
  throw new TypeError('Invalid address');
108
412
  }
109
- hash = _address().hash;
413
+ hash = addr.hash;
110
414
  }
111
- if (a.hash) {
112
- if (hash.length > 0 && !hash.equals(a.hash)) {
415
+ if (this.#inputHash) {
416
+ if (hash.length > 0 && !equals(hash, this.#inputHash)) {
113
417
  throw new TypeError('Hash mismatch');
114
418
  }
115
419
  else {
116
- hash = a.hash;
420
+ hash = this.#inputHash;
117
421
  }
118
422
  }
119
- if (a.output) {
120
- if (a.output.length !== 25 ||
121
- a.output[0] !== OPS.OP_DUP ||
122
- a.output[1] !== OPS.OP_HASH160 ||
123
- a.output[2] !== 0x14 ||
124
- a.output[23] !== OPS.OP_EQUALVERIFY ||
125
- a.output[24] !== OPS.OP_CHECKSIG) {
423
+ if (this.#inputOutput) {
424
+ if (this.#inputOutput.length !== 25 ||
425
+ this.#inputOutput[0] !== OPS.OP_DUP ||
426
+ this.#inputOutput[1] !== OPS.OP_HASH160 ||
427
+ this.#inputOutput[2] !== 0x14 ||
428
+ this.#inputOutput[23] !== OPS.OP_EQUALVERIFY ||
429
+ this.#inputOutput[24] !== OPS.OP_CHECKSIG) {
126
430
  throw new TypeError('Output is invalid');
127
431
  }
128
- const hash2 = a.output.subarray(3, 23);
129
- if (hash.length > 0 && !hash.equals(hash2))
432
+ const hash2 = this.#inputOutput.subarray(3, 23);
433
+ if (hash.length > 0 && !equals(hash, hash2)) {
130
434
  throw new TypeError('Hash mismatch');
131
- else
435
+ }
436
+ else {
132
437
  hash = hash2;
438
+ }
133
439
  }
134
- if (a.pubkey) {
135
- const pkh = bcrypto.hash160(a.pubkey);
136
- let badHash = hash.length > 0 && !hash.equals(pkh);
440
+ if (this.#inputPubkey) {
441
+ const pkh = bcrypto.hash160(this.#inputPubkey);
442
+ let badHash = hash.length > 0 && !equals(hash, pkh);
137
443
  if (badHash) {
138
- if ((a.pubkey.length === 33 && (a.pubkey[0] === 0x02 || a.pubkey[0] === 0x03)) ||
139
- (a.pubkey.length === 65 && a.pubkey[0] === 0x04)) {
140
- const uncompressed = decompressPublicKey(a.pubkey);
444
+ if ((this.#inputPubkey.length === 33 &&
445
+ (this.#inputPubkey[0] === 0x02 || this.#inputPubkey[0] === 0x03)) ||
446
+ (this.#inputPubkey.length === 65 && this.#inputPubkey[0] === 0x04)) {
447
+ const uncompressed = decompressPublicKey(this.#inputPubkey);
141
448
  if (uncompressed) {
142
449
  const pkh2 = bcrypto.hash160(uncompressed.uncompressed);
143
- if (!hash.equals(pkh2)) {
450
+ if (!equals(hash, pkh2)) {
144
451
  const pkh3 = bcrypto.hash160(uncompressed.hybrid);
145
- badHash = !hash.equals(pkh3);
452
+ badHash = !equals(hash, pkh3);
146
453
  if (!badHash) {
147
- a.useHybrid = true;
454
+ this.#useHybrid = true;
148
455
  }
149
456
  }
150
457
  else {
151
458
  badHash = false;
152
- a.useUncompressed = true;
459
+ this.#useUncompressed = true;
153
460
  }
154
461
  }
155
462
  }
@@ -161,22 +468,68 @@ export function p2pkh(a, opts) {
161
468
  hash = pkh;
162
469
  }
163
470
  }
164
- if (a.input) {
165
- const chunks = _chunks();
166
- if (chunks.length !== 2)
471
+ if (this.#inputInput) {
472
+ const chunks = this.#getInputChunks();
473
+ if (!chunks || chunks.length !== 2) {
167
474
  throw new TypeError('Input is invalid');
168
- if (!bscript.isCanonicalScriptSignature(chunks[0]))
475
+ }
476
+ if (!bscript.isCanonicalScriptSignature(chunks[0])) {
169
477
  throw new TypeError('Input has invalid signature');
170
- if (!isPoint(chunks[1]))
478
+ }
479
+ if (!isPoint(chunks[1])) {
171
480
  throw new TypeError('Input has invalid pubkey');
172
- if (a.signature && !a.signature.equals(chunks[0]))
481
+ }
482
+ if (this.#inputSignature && !equals(this.#inputSignature, chunks[0])) {
173
483
  throw new TypeError('Signature mismatch');
174
- if (a.pubkey && !a.pubkey.equals(chunks[1]))
484
+ }
485
+ if (this.#inputPubkey && !equals(this.#inputPubkey, chunks[1])) {
175
486
  throw new TypeError('Pubkey mismatch');
487
+ }
176
488
  const pkh = bcrypto.hash160(chunks[1]);
177
- if (hash.length > 0 && !hash.equals(pkh))
489
+ if (hash.length > 0 && !equals(hash, pkh)) {
178
490
  throw new TypeError('Hash mismatch (input)');
491
+ }
179
492
  }
180
493
  }
181
- return Object.assign(o, a);
182
494
  }
495
+ /**
496
+ * Creates a Pay-to-Public-Key-Hash (P2PKH) payment object.
497
+ *
498
+ * This is the legacy factory function for backwards compatibility.
499
+ * For new code, prefer using the P2PKH class directly.
500
+ *
501
+ * @param a - The payment object containing the necessary data
502
+ * @param opts - Optional payment options
503
+ * @returns The P2PKH payment object
504
+ * @throws {TypeError} If the required data is not provided or if the data is invalid
505
+ *
506
+ * @example
507
+ * ```typescript
508
+ * import { p2pkh } from '@btc-vision/bitcoin';
509
+ *
510
+ * // Create from public key
511
+ * const payment = p2pkh({ pubkey });
512
+ *
513
+ * // Create from address
514
+ * const fromAddr = p2pkh({ address: '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2' });
515
+ * ```
516
+ */
517
+ export function p2pkh(a, opts) {
518
+ if (!a.address && !a.hash && !a.output && !a.pubkey && !a.input) {
519
+ throw new TypeError('Not enough data');
520
+ }
521
+ const instance = new P2PKH({
522
+ address: a.address,
523
+ hash: a.hash,
524
+ pubkey: a.pubkey,
525
+ signature: a.signature,
526
+ output: a.output,
527
+ input: a.input,
528
+ network: a.network,
529
+ useHybrid: a.useHybrid,
530
+ useUncompressed: a.useUncompressed,
531
+ }, opts);
532
+ // Return a merged object for backwards compatibility
533
+ return Object.assign(instance.toPayment(), a);
534
+ }
535
+ //# sourceMappingURL=p2pkh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p2pkh.js","sourceRoot":"","sources":["../../src/payments/p2pkh.ts"],"names":[],"mappings":"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"}