@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,133 +1,419 @@
1
+ /**
2
+ * Pay-to-OPNet (P2OP) payment class.
3
+ *
4
+ * P2OP is a custom witness version 16 output type for the OPNet network.
5
+ * The witness program contains a deployment version and hash160.
6
+ *
7
+ * @packageDocumentation
8
+ */
1
9
  import { bech32m } from 'bech32';
2
- import { Buffer as NBuffer } from 'buffer';
3
10
  import { fromBech32 } from '../bech32utils.js';
4
11
  import { bitcoin as BITCOIN_NETWORK } from '../networks.js';
5
12
  import * as bscript from '../script.js';
6
- import { typeforce as typef } from '../types.js';
13
+ import { alloc, concat, equals } from '../io/index.js';
7
14
  import { PaymentType } from './types.js';
8
- import * as lazy from './lazy.js';
9
15
  const OPS = bscript.opcodes;
10
16
  const P2OP_WITNESS_VERSION = 0x10;
11
17
  const MIN_SIZE = 2;
12
18
  const MAX_SIZE = 40;
13
- export function p2op(a, opts) {
14
- if (!a.address &&
15
- !a.output &&
16
- !a.program &&
17
- (typeof a.deploymentVersion === 'undefined' || !a.hash160)) {
18
- throw new TypeError('At least one of address, output or program must be provided');
19
+ /**
20
+ * Pay-to-OPNet (P2OP) payment class.
21
+ *
22
+ * Creates locking scripts of the form: `OP_16 {program}`
23
+ * where program = `{deploymentVersion:uint8}{hash160:20-bytes|...}`
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * import { P2OP } from '@btc-vision/bitcoin';
28
+ *
29
+ * // Create from program
30
+ * const payment = P2OP.fromProgram(program);
31
+ * console.log(payment.address); // opnet address
32
+ *
33
+ * // Create from deployment version and hash160
34
+ * const fromParts = P2OP.fromParts(deploymentVersion, hash160);
35
+ *
36
+ * // Decode an existing output
37
+ * const decoded = P2OP.fromOutput(scriptPubKey);
38
+ * console.log(decoded.program);
39
+ * ```
40
+ */
41
+ export class P2OP {
42
+ // Static public fields
43
+ static NAME = PaymentType.P2OP;
44
+ // Private instance fields
45
+ #network;
46
+ #opts;
47
+ // Input data (provided by user)
48
+ #inputAddress;
49
+ #inputProgram;
50
+ #inputDeploymentVersion;
51
+ #inputHash160;
52
+ #inputOutput;
53
+ // Cached computed values
54
+ #address;
55
+ #program;
56
+ #deploymentVersion;
57
+ #hash160;
58
+ #output;
59
+ // Cache flags
60
+ #addressComputed = false;
61
+ #programComputed = false;
62
+ #deploymentVersionComputed = false;
63
+ #hash160Computed = false;
64
+ #outputComputed = false;
65
+ // Decoded address cache
66
+ #decodedAddress;
67
+ #decodedAddressComputed = false;
68
+ /**
69
+ * Creates a new P2OP payment instance.
70
+ *
71
+ * @param params - Payment parameters
72
+ * @param params.address - Bech32m encoded OPNet address
73
+ * @param params.program - Witness program (2-40 bytes)
74
+ * @param params.deploymentVersion - Deployment version (0-255)
75
+ * @param params.hash160 - 20-byte hash
76
+ * @param params.output - The scriptPubKey
77
+ * @param params.network - Network parameters (defaults to mainnet)
78
+ * @param opts - Payment options
79
+ * @param opts.validate - Whether to validate inputs (default: true)
80
+ *
81
+ * @throws {TypeError} If validation is enabled and data is invalid
82
+ */
83
+ constructor(params, opts) {
84
+ this.#network = params.network ?? BITCOIN_NETWORK;
85
+ this.#opts = {
86
+ validate: opts?.validate ?? true,
87
+ allowIncomplete: opts?.allowIncomplete ?? false,
88
+ };
89
+ // Store input data
90
+ this.#inputAddress = params.address;
91
+ this.#inputProgram = params.program;
92
+ this.#inputDeploymentVersion = params.deploymentVersion;
93
+ this.#inputHash160 = params.hash160;
94
+ this.#inputOutput = params.output;
95
+ // Validate if requested
96
+ if (this.#opts.validate) {
97
+ this.#validate();
98
+ }
99
+ }
100
+ // Public getters
101
+ /**
102
+ * Payment type discriminant.
103
+ */
104
+ get name() {
105
+ return PaymentType.P2OP;
106
+ }
107
+ /**
108
+ * Network parameters.
109
+ */
110
+ get network() {
111
+ return this.#network;
112
+ }
113
+ /**
114
+ * Bech32m encoded OPNet address.
115
+ */
116
+ get address() {
117
+ if (!this.#addressComputed) {
118
+ this.#address = this.#computeAddress();
119
+ this.#addressComputed = true;
120
+ }
121
+ return this.#address;
122
+ }
123
+ /**
124
+ * Witness program (2-40 bytes).
125
+ * Format: `{deploymentVersion:uint8}{hash160:20-bytes|...}`
126
+ */
127
+ get program() {
128
+ if (!this.#programComputed) {
129
+ this.#program = this.#computeProgram();
130
+ this.#programComputed = true;
131
+ }
132
+ return this.#program;
133
+ }
134
+ /**
135
+ * Deployment version (first byte of program).
136
+ */
137
+ get deploymentVersion() {
138
+ if (!this.#deploymentVersionComputed) {
139
+ this.#deploymentVersion = this.#computeDeploymentVersion();
140
+ this.#deploymentVersionComputed = true;
141
+ }
142
+ return this.#deploymentVersion;
143
+ }
144
+ /**
145
+ * Hash160 (remaining bytes of program).
146
+ */
147
+ get hash160() {
148
+ if (!this.#hash160Computed) {
149
+ this.#hash160 = this.#computeHash160();
150
+ this.#hash160Computed = true;
151
+ }
152
+ return this.#hash160;
19
153
  }
20
- opts = Object.assign({ validate: true }, opts || {});
21
- typef({
22
- address: typef.maybe(typef.String),
23
- output: typef.maybe(typef.Buffer),
24
- program: typef.maybe(typef.Buffer),
25
- network: typef.maybe(typef.Object),
26
- deploymentVersion: typef.maybe(typef.Number),
27
- hash160: typef.maybe(typef.BufferN(20)),
28
- }, a);
29
- const makeProgramFromParts = () => {
30
- if (typeof a.deploymentVersion !== 'undefined' && typeof a.hash160 !== 'undefined') {
31
- if (a.hash160.length !== 20)
154
+ /**
155
+ * The scriptPubKey: `OP_16 {program}`
156
+ */
157
+ get output() {
158
+ if (!this.#outputComputed) {
159
+ this.#output = this.#computeOutput();
160
+ this.#outputComputed = true;
161
+ }
162
+ return this.#output;
163
+ }
164
+ // Static factory methods
165
+ /**
166
+ * Creates a P2OP payment from a witness program.
167
+ *
168
+ * @param program - Witness program (2-40 bytes)
169
+ * @param network - Network parameters (defaults to mainnet)
170
+ * @returns A new P2OP payment instance
171
+ */
172
+ static fromProgram(program, network) {
173
+ return new P2OP({ program, network });
174
+ }
175
+ /**
176
+ * Creates a P2OP payment from deployment version and hash160.
177
+ *
178
+ * @param deploymentVersion - Deployment version (0-255)
179
+ * @param hash160 - 20-byte hash
180
+ * @param network - Network parameters (defaults to mainnet)
181
+ * @returns A new P2OP payment instance
182
+ */
183
+ static fromParts(deploymentVersion, hash160, network) {
184
+ return new P2OP({ deploymentVersion, hash160, network });
185
+ }
186
+ /**
187
+ * Creates a P2OP payment from an OPNet address.
188
+ *
189
+ * @param address - Bech32m encoded OPNet address
190
+ * @param network - Network parameters (defaults to mainnet)
191
+ * @returns A new P2OP payment instance
192
+ */
193
+ static fromAddress(address, network) {
194
+ return new P2OP({ address, network });
195
+ }
196
+ /**
197
+ * Creates a P2OP payment from a scriptPubKey.
198
+ *
199
+ * @param output - The scriptPubKey
200
+ * @param network - Network parameters (defaults to mainnet)
201
+ * @returns A new P2OP payment instance
202
+ */
203
+ static fromOutput(output, network) {
204
+ return new P2OP({ output, network });
205
+ }
206
+ // Private helper methods
207
+ /**
208
+ * Converts to a plain P2OPPayment object for backwards compatibility.
209
+ *
210
+ * @returns A P2OPPayment object
211
+ */
212
+ toPayment() {
213
+ return {
214
+ name: this.name,
215
+ network: this.network,
216
+ address: this.address,
217
+ program: this.program,
218
+ deploymentVersion: this.deploymentVersion,
219
+ hash160: this.hash160,
220
+ output: this.output,
221
+ };
222
+ }
223
+ #getDecodedAddress() {
224
+ if (!this.#decodedAddressComputed) {
225
+ if (this.#inputAddress) {
226
+ const decoded = fromBech32(this.#inputAddress);
227
+ if (decoded) {
228
+ this.#decodedAddress = {
229
+ version: decoded.version,
230
+ prefix: decoded.prefix,
231
+ data: decoded.data,
232
+ };
233
+ }
234
+ }
235
+ this.#decodedAddressComputed = true;
236
+ }
237
+ return this.#decodedAddress;
238
+ }
239
+ // Private computation methods
240
+ #makeProgramFromParts() {
241
+ if (typeof this.#inputDeploymentVersion !== 'undefined' &&
242
+ typeof this.#inputHash160 !== 'undefined') {
243
+ if (this.#inputHash160.length !== 20) {
32
244
  throw new TypeError('hash160 must be exactly 20 bytes');
33
- if (a.deploymentVersion < 0 || a.deploymentVersion > 0xff)
245
+ }
246
+ if (this.#inputDeploymentVersion < 0 || this.#inputDeploymentVersion > 0xff) {
34
247
  throw new TypeError('deploymentVersion must fit in one byte');
35
- return Buffer.concat([Buffer.of(a.deploymentVersion), a.hash160]);
248
+ }
249
+ return concat([new Uint8Array([this.#inputDeploymentVersion]), this.#inputHash160]);
36
250
  }
37
251
  return undefined;
38
- };
39
- const _address = lazy.value(() => fromBech32(a.address));
40
- const network = a.network || BITCOIN_NETWORK;
41
- const o = {
42
- name: PaymentType.P2OP,
43
- network,
44
- deploymentVersion: 0,
45
- };
46
- lazy.prop(o, 'program', () => {
47
- if (a.program)
48
- return a.program;
49
- const fromParts = makeProgramFromParts();
50
- if (fromParts)
252
+ }
253
+ #computeAddress() {
254
+ if (this.#inputAddress) {
255
+ return this.#inputAddress;
256
+ }
257
+ const prog = this.program;
258
+ if (!prog)
259
+ return undefined;
260
+ if (!this.#network.bech32Opnet) {
261
+ throw new TypeError('Network does not support opnet');
262
+ }
263
+ const words = bech32m.toWords(prog);
264
+ words.unshift(P2OP_WITNESS_VERSION);
265
+ return bech32m.encode(this.#network.bech32Opnet, words);
266
+ }
267
+ #computeProgram() {
268
+ if (this.#inputProgram) {
269
+ return this.#inputProgram;
270
+ }
271
+ // Build from deployment version + hash160
272
+ const fromParts = this.#makeProgramFromParts();
273
+ if (fromParts) {
51
274
  return fromParts;
52
- if (a.output) {
53
- if (a.output[0] !== OPS.OP_16)
275
+ }
276
+ if (this.#inputOutput) {
277
+ if (this.#inputOutput[0] !== OPS.OP_16) {
54
278
  throw new TypeError('Invalid P2OP script');
55
- let pushPos = 1, progLen;
56
- if (a.output[1] < 0x4c) {
57
- progLen = a.output[1];
279
+ }
280
+ let pushPos = 1;
281
+ let progLen;
282
+ if (this.#inputOutput[1] < 0x4c) {
283
+ progLen = this.#inputOutput[1];
58
284
  pushPos = 2;
59
285
  }
60
- else if (a.output[1] === 0x4c) {
61
- progLen = a.output[2];
286
+ else if (this.#inputOutput[1] === 0x4c) {
287
+ progLen = this.#inputOutput[2];
62
288
  pushPos = 3;
63
289
  }
64
290
  else {
65
291
  throw new TypeError('Unsupported push opcode in P2OP script');
66
292
  }
67
- return a.output.subarray(pushPos, pushPos + progLen);
68
- }
69
- if (a.address) {
70
- const dec = _address();
71
- return dec.data;
72
- }
73
- });
74
- lazy.prop(o, 'deploymentVersion', () => {
75
- if (!o.program)
76
- return;
77
- return o.program[0];
78
- });
79
- lazy.prop(o, 'hash160', () => {
80
- if (!o.program)
81
- return;
82
- return o.program.subarray(1);
83
- });
84
- lazy.prop(o, 'output', () => {
85
- if (!o.program)
86
- return;
87
- return bscript.compile([OPS.OP_16, o.program]);
88
- });
89
- lazy.prop(o, 'address', () => {
90
- if (!o.program)
91
- return;
92
- if (!network.bech32Opnet) {
93
- throw new TypeError('Network does not support opnet');
293
+ return this.#inputOutput.subarray(pushPos, pushPos + progLen);
94
294
  }
95
- const words = bech32m.toWords(o.program);
96
- words.unshift(P2OP_WITNESS_VERSION);
97
- return bech32m.encode(network.bech32Opnet, words);
98
- });
99
- if (opts.validate) {
100
- let prog = NBuffer.alloc(0);
101
- if (a.address) {
102
- const dec = _address();
103
- if (network.bech32Opnet !== dec.prefix)
295
+ if (this.#inputAddress) {
296
+ return this.#getDecodedAddress()?.data;
297
+ }
298
+ return undefined;
299
+ }
300
+ #computeDeploymentVersion() {
301
+ if (this.#inputDeploymentVersion !== undefined) {
302
+ return this.#inputDeploymentVersion;
303
+ }
304
+ const prog = this.program;
305
+ if (!prog)
306
+ return undefined;
307
+ return prog[0];
308
+ }
309
+ #computeHash160() {
310
+ if (this.#inputHash160) {
311
+ return this.#inputHash160;
312
+ }
313
+ const prog = this.program;
314
+ if (!prog)
315
+ return undefined;
316
+ return prog.subarray(1);
317
+ }
318
+ // Validation
319
+ #computeOutput() {
320
+ if (this.#inputOutput) {
321
+ return this.#inputOutput;
322
+ }
323
+ const prog = this.program;
324
+ if (!prog)
325
+ return undefined;
326
+ return bscript.compile([OPS.OP_16, prog]);
327
+ }
328
+ #validate() {
329
+ let prog = alloc(0);
330
+ if (this.#inputAddress) {
331
+ const dec = this.#getDecodedAddress();
332
+ if (!dec) {
333
+ throw new TypeError('Invalid address');
334
+ }
335
+ if (this.#network.bech32Opnet !== dec.prefix) {
104
336
  throw new TypeError('Invalid prefix or network mismatch');
105
- if (dec.version !== P2OP_WITNESS_VERSION)
337
+ }
338
+ if (dec.version !== P2OP_WITNESS_VERSION) {
106
339
  throw new TypeError('Invalid witness version for p2op');
107
- if (dec.data.length < MIN_SIZE || dec.data.length > MAX_SIZE)
340
+ }
341
+ if (dec.data.length < MIN_SIZE || dec.data.length > MAX_SIZE) {
108
342
  throw new TypeError('Invalid witness program length');
343
+ }
109
344
  prog = dec.data;
110
345
  }
111
- if (a.program) {
112
- if (prog.length && !prog.equals(a.program))
346
+ if (this.#inputProgram) {
347
+ if (prog.length > 0 && !equals(prog, this.#inputProgram)) {
113
348
  throw new TypeError('Program mismatch');
114
- prog = a.program;
349
+ }
350
+ prog = this.#inputProgram;
115
351
  }
116
- if (!prog.length && a.deploymentVersion !== undefined && a.hash160) {
117
- prog = makeProgramFromParts();
352
+ if (!prog.length && this.#inputDeploymentVersion !== undefined && this.#inputHash160) {
353
+ const made = this.#makeProgramFromParts();
354
+ if (made)
355
+ prog = made;
118
356
  }
119
- if (a.output) {
120
- const outProg = o.program;
121
- if (prog.length && !prog.equals(outProg))
357
+ if (this.#inputOutput) {
358
+ const outProg = this.program;
359
+ if (!outProg) {
360
+ throw new TypeError('Output program is required');
361
+ }
362
+ if (prog.length > 0 && !equals(prog, outProg)) {
122
363
  throw new TypeError('Program mismatch (output vs other source)');
364
+ }
123
365
  prog = outProg;
124
366
  }
125
- if (prog.length < MIN_SIZE || prog.length > MAX_SIZE)
367
+ if (prog.length < MIN_SIZE || prog.length > MAX_SIZE) {
126
368
  throw new TypeError(`Witness program must be 2–40 bytes. Was ${prog.length} bytes`);
127
- if (a.deploymentVersion !== undefined && a.deploymentVersion !== prog[0])
369
+ }
370
+ if (this.#inputDeploymentVersion !== undefined &&
371
+ this.#inputDeploymentVersion !== prog[0]) {
128
372
  throw new TypeError('deploymentVersion mismatch');
129
- if (a.hash160 && !a.hash160.equals(prog.subarray(1)))
373
+ }
374
+ if (this.#inputHash160 && !equals(this.#inputHash160, prog.subarray(1))) {
130
375
  throw new TypeError('hash160 mismatch');
376
+ }
377
+ }
378
+ }
379
+ /**
380
+ * Creates a Pay-to-OPNet (P2OP) payment object.
381
+ *
382
+ * This is the legacy factory function for backwards compatibility.
383
+ * For new code, prefer using the P2OP class directly.
384
+ *
385
+ * @param a - The payment object containing the necessary data
386
+ * @param opts - Optional payment options
387
+ * @returns The P2OP payment object
388
+ * @throws {TypeError} If the required data is not provided or if the data is invalid
389
+ *
390
+ * @example
391
+ * ```typescript
392
+ * import { p2op } from '@btc-vision/bitcoin';
393
+ *
394
+ * // Create from program
395
+ * const payment = p2op({ program });
396
+ *
397
+ * // Create from parts
398
+ * const fromParts = p2op({ deploymentVersion: 0, hash160 });
399
+ * ```
400
+ */
401
+ export function p2op(a, opts) {
402
+ if (!a.address &&
403
+ !a.output &&
404
+ !a.program &&
405
+ (typeof a.deploymentVersion === 'undefined' || !a.hash160)) {
406
+ throw new TypeError('At least one of address, output or program must be provided');
131
407
  }
132
- return Object.assign(o, a);
408
+ const instance = new P2OP({
409
+ address: a.address,
410
+ program: a.program,
411
+ deploymentVersion: a.deploymentVersion,
412
+ hash160: a.hash160,
413
+ output: a.output,
414
+ network: a.network,
415
+ }, opts);
416
+ // Return a merged object for backwards compatibility
417
+ return Object.assign(instance.toPayment(), a);
133
418
  }
419
+ //# sourceMappingURL=p2op.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p2op.js","sourceRoot":"","sources":["../../src/payments/p2op.ts"],"names":[],"mappings":"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"}