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