@btc-vision/bitcoin 6.5.5 → 7.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (457) hide show
  1. package/AUDIT/README.md +9 -0
  2. package/HOW_TO_WRITE_GOOD_CODE.md +2436 -0
  3. package/SECURITY.md +27 -0
  4. package/benchmark/psbt-2000-inputs.bench.ts +178 -0
  5. package/benchmark/signing.bench.ts +147 -0
  6. package/browser/address.d.ts +56 -9
  7. package/browser/address.d.ts.map +1 -0
  8. package/browser/bech32utils.d.ts +9 -1
  9. package/browser/bech32utils.d.ts.map +1 -0
  10. package/browser/bip66.d.ts +11 -6
  11. package/browser/bip66.d.ts.map +1 -0
  12. package/browser/block.d.ts +117 -11
  13. package/browser/block.d.ts.map +1 -0
  14. package/browser/branded.d.ts +20 -0
  15. package/browser/branded.d.ts.map +1 -0
  16. package/browser/crypto/crypto.d.ts +1 -0
  17. package/browser/crypto/crypto.d.ts.map +1 -0
  18. package/browser/crypto.d.ts +46 -7
  19. package/browser/crypto.d.ts.map +1 -0
  20. package/browser/ecc/context.d.ts +129 -0
  21. package/browser/ecc/context.d.ts.map +1 -0
  22. package/browser/ecc/index.d.ts +11 -0
  23. package/browser/ecc/index.d.ts.map +1 -0
  24. package/browser/ecc/types.d.ts +128 -0
  25. package/browser/ecc/types.d.ts.map +1 -0
  26. package/browser/ecpair.d.ts +99 -0
  27. package/browser/errors.d.ts +124 -0
  28. package/browser/errors.d.ts.map +1 -0
  29. package/browser/index.d.ts +32 -5
  30. package/browser/index.d.ts.map +1 -0
  31. package/browser/index.js +12482 -101
  32. package/browser/io/BinaryReader.d.ts +276 -0
  33. package/browser/io/BinaryReader.d.ts.map +1 -0
  34. package/browser/io/BinaryWriter.d.ts +391 -0
  35. package/browser/io/BinaryWriter.d.ts.map +1 -0
  36. package/browser/io/MemoryPool.d.ts +220 -0
  37. package/browser/io/MemoryPool.d.ts.map +1 -0
  38. package/browser/io/base64.d.ts +13 -0
  39. package/browser/io/base64.d.ts.map +1 -0
  40. package/browser/io/hex.d.ts +67 -0
  41. package/browser/io/hex.d.ts.map +1 -0
  42. package/browser/io/index.d.ts +17 -0
  43. package/browser/io/index.d.ts.map +1 -0
  44. package/browser/io/utils.d.ts +199 -0
  45. package/browser/io/utils.d.ts.map +1 -0
  46. package/browser/merkle.d.ts +10 -1
  47. package/browser/merkle.d.ts.map +1 -0
  48. package/browser/networks.d.ts +70 -9
  49. package/browser/networks.d.ts.map +1 -0
  50. package/browser/opcodes.d.ts +1 -0
  51. package/browser/opcodes.d.ts.map +1 -0
  52. package/browser/payments/bip341.d.ts +35 -9
  53. package/browser/payments/bip341.d.ts.map +1 -0
  54. package/browser/payments/embed.d.ts +112 -1
  55. package/browser/payments/embed.d.ts.map +1 -0
  56. package/browser/payments/index.d.ts +17 -10
  57. package/browser/payments/index.d.ts.map +1 -0
  58. package/browser/payments/p2ms.d.ts +150 -0
  59. package/browser/payments/p2ms.d.ts.map +1 -0
  60. package/browser/payments/p2op.d.ts +150 -24
  61. package/browser/payments/p2op.d.ts.map +1 -0
  62. package/browser/payments/p2pk.d.ts +154 -1
  63. package/browser/payments/p2pk.d.ts.map +1 -0
  64. package/browser/payments/p2pkh.d.ts +176 -1
  65. package/browser/payments/p2pkh.d.ts.map +1 -0
  66. package/browser/payments/p2sh.d.ts +150 -1
  67. package/browser/payments/p2sh.d.ts.map +1 -0
  68. package/browser/payments/p2tr.d.ts +185 -1
  69. package/browser/payments/p2tr.d.ts.map +1 -0
  70. package/browser/payments/p2wpkh.d.ts +161 -1
  71. package/browser/payments/p2wpkh.d.ts.map +1 -0
  72. package/browser/payments/p2wsh.d.ts +146 -1
  73. package/browser/payments/p2wsh.d.ts.map +1 -0
  74. package/browser/payments/types.d.ts +94 -64
  75. package/browser/payments/types.d.ts.map +1 -0
  76. package/browser/psbt/bip371.d.ts +34 -8
  77. package/browser/psbt/bip371.d.ts.map +1 -0
  78. package/browser/psbt/psbtutils.d.ts +56 -16
  79. package/browser/psbt/psbtutils.d.ts.map +1 -0
  80. package/browser/psbt/types.d.ts +245 -0
  81. package/browser/psbt/types.d.ts.map +1 -0
  82. package/browser/psbt/utils.d.ts +64 -0
  83. package/browser/psbt/utils.d.ts.map +1 -0
  84. package/browser/psbt/validation.d.ts +84 -0
  85. package/browser/psbt/validation.d.ts.map +1 -0
  86. package/browser/psbt.d.ts +82 -118
  87. package/browser/psbt.d.ts.map +1 -0
  88. package/browser/pubkey.d.ts +27 -6
  89. package/browser/pubkey.d.ts.map +1 -0
  90. package/browser/push_data.d.ts +24 -2
  91. package/browser/push_data.d.ts.map +1 -0
  92. package/browser/script.d.ts +33 -8
  93. package/browser/script.d.ts.map +1 -0
  94. package/browser/script_number.d.ts +17 -0
  95. package/browser/script_number.d.ts.map +1 -0
  96. package/browser/script_signature.d.ts +23 -5
  97. package/browser/script_signature.d.ts.map +1 -0
  98. package/browser/transaction.d.ts +160 -18
  99. package/browser/transaction.d.ts.map +1 -0
  100. package/browser/types.d.ts +36 -38
  101. package/browser/types.d.ts.map +1 -0
  102. package/browser/workers/WorkerSigningPool.d.ts +143 -0
  103. package/browser/workers/WorkerSigningPool.d.ts.map +1 -0
  104. package/browser/workers/WorkerSigningPool.node.d.ts +116 -0
  105. package/browser/workers/WorkerSigningPool.node.d.ts.map +1 -0
  106. package/browser/workers/ecc-bundle.d.ts +25 -0
  107. package/browser/workers/ecc-bundle.d.ts.map +1 -0
  108. package/browser/workers/index.d.ts +91 -0
  109. package/browser/workers/index.d.ts.map +1 -0
  110. package/browser/workers/psbt-parallel.d.ts +88 -0
  111. package/browser/workers/psbt-parallel.d.ts.map +1 -0
  112. package/browser/workers/signing-worker.d.ts +37 -0
  113. package/browser/workers/signing-worker.d.ts.map +1 -0
  114. package/browser/workers/types.d.ts +365 -0
  115. package/browser/workers/types.d.ts.map +1 -0
  116. package/build/address.d.ts +57 -10
  117. package/build/address.d.ts.map +1 -0
  118. package/build/address.js +80 -24
  119. package/build/address.js.map +1 -0
  120. package/build/bech32utils.d.ts +9 -1
  121. package/build/bech32utils.d.ts.map +1 -0
  122. package/build/bech32utils.js +10 -2
  123. package/build/bech32utils.js.map +1 -0
  124. package/build/bip66.d.ts +11 -6
  125. package/build/bip66.d.ts.map +1 -0
  126. package/build/bip66.js +32 -3
  127. package/build/bip66.js.map +1 -0
  128. package/build/block.d.ts +117 -11
  129. package/build/block.d.ts.map +1 -0
  130. package/build/block.js +204 -72
  131. package/build/block.js.map +1 -0
  132. package/build/branded.d.ts +20 -0
  133. package/build/branded.d.ts.map +1 -0
  134. package/build/branded.js +7 -0
  135. package/build/branded.js.map +1 -0
  136. package/build/crypto/crypto.d.ts +1 -0
  137. package/build/crypto/crypto.d.ts.map +1 -0
  138. package/build/crypto/crypto.js +1 -0
  139. package/build/crypto/crypto.js.map +1 -0
  140. package/build/crypto.d.ts +46 -7
  141. package/build/crypto.d.ts.map +1 -0
  142. package/build/crypto.js +65 -20
  143. package/build/crypto.js.map +1 -0
  144. package/build/ecc/context.d.ts +135 -0
  145. package/build/ecc/context.d.ts.map +1 -0
  146. package/build/ecc/context.js +232 -0
  147. package/build/ecc/context.js.map +1 -0
  148. package/build/ecc/index.d.ts +11 -0
  149. package/build/ecc/index.d.ts.map +1 -0
  150. package/build/ecc/index.js +11 -0
  151. package/build/ecc/index.js.map +1 -0
  152. package/build/ecc/types.d.ts +134 -0
  153. package/build/ecc/types.d.ts.map +1 -0
  154. package/build/ecc/types.js +8 -0
  155. package/build/ecc/types.js.map +1 -0
  156. package/build/errors.d.ts +124 -0
  157. package/build/errors.d.ts.map +1 -0
  158. package/build/errors.js +155 -0
  159. package/build/errors.js.map +1 -0
  160. package/build/index.d.ts +32 -5
  161. package/build/index.d.ts.map +1 -0
  162. package/build/index.js +26 -3
  163. package/build/index.js.map +1 -0
  164. package/build/io/BinaryReader.d.ts +276 -0
  165. package/build/io/BinaryReader.d.ts.map +1 -0
  166. package/build/io/BinaryReader.js +425 -0
  167. package/build/io/BinaryReader.js.map +1 -0
  168. package/build/io/BinaryWriter.d.ts +391 -0
  169. package/build/io/BinaryWriter.d.ts.map +1 -0
  170. package/build/io/BinaryWriter.js +611 -0
  171. package/build/io/BinaryWriter.js.map +1 -0
  172. package/build/io/MemoryPool.d.ts +220 -0
  173. package/build/io/MemoryPool.d.ts.map +1 -0
  174. package/build/io/MemoryPool.js +309 -0
  175. package/build/io/MemoryPool.js.map +1 -0
  176. package/build/io/base64.d.ts +13 -0
  177. package/build/io/base64.d.ts.map +1 -0
  178. package/build/io/base64.js +20 -0
  179. package/build/io/base64.js.map +1 -0
  180. package/build/io/hex.d.ts +67 -0
  181. package/build/io/hex.d.ts.map +1 -0
  182. package/build/io/hex.js +138 -0
  183. package/build/io/hex.js.map +1 -0
  184. package/build/io/index.d.ts +17 -0
  185. package/build/io/index.d.ts.map +1 -0
  186. package/build/io/index.js +23 -0
  187. package/build/io/index.js.map +1 -0
  188. package/build/io/utils.d.ts +199 -0
  189. package/build/io/utils.d.ts.map +1 -0
  190. package/build/io/utils.js +271 -0
  191. package/build/io/utils.js.map +1 -0
  192. package/build/merkle.d.ts +10 -1
  193. package/build/merkle.d.ts.map +1 -0
  194. package/build/merkle.js +12 -1
  195. package/build/merkle.js.map +1 -0
  196. package/build/networks.d.ts +70 -9
  197. package/build/networks.d.ts.map +1 -0
  198. package/build/networks.js +90 -4
  199. package/build/networks.js.map +1 -0
  200. package/build/opcodes.d.ts +1 -0
  201. package/build/opcodes.d.ts.map +1 -0
  202. package/build/opcodes.js +1 -0
  203. package/build/opcodes.js.map +1 -0
  204. package/build/payments/bip341.d.ts +36 -9
  205. package/build/payments/bip341.d.ts.map +1 -0
  206. package/build/payments/bip341.js +35 -15
  207. package/build/payments/bip341.js.map +1 -0
  208. package/build/payments/embed.d.ts +120 -1
  209. package/build/payments/embed.d.ts.map +1 -0
  210. package/build/payments/embed.js +215 -34
  211. package/build/payments/embed.js.map +1 -0
  212. package/build/payments/index.d.ts +17 -10
  213. package/build/payments/index.d.ts.map +1 -0
  214. package/build/payments/index.js +20 -10
  215. package/build/payments/index.js.map +1 -0
  216. package/build/payments/p2ms.d.ts +159 -1
  217. package/build/payments/p2ms.d.ts.map +1 -0
  218. package/build/payments/p2ms.js +427 -108
  219. package/build/payments/p2ms.js.map +1 -0
  220. package/build/payments/p2op.d.ts +158 -24
  221. package/build/payments/p2op.d.ts.map +1 -0
  222. package/build/payments/p2op.js +379 -93
  223. package/build/payments/p2op.js.map +1 -0
  224. package/build/payments/p2pk.d.ts +162 -1
  225. package/build/payments/p2pk.d.ts.map +1 -0
  226. package/build/payments/p2pk.js +327 -58
  227. package/build/payments/p2pk.js.map +1 -0
  228. package/build/payments/p2pkh.d.ts +185 -1
  229. package/build/payments/p2pkh.d.ts.map +1 -0
  230. package/build/payments/p2pkh.js +467 -114
  231. package/build/payments/p2pkh.js.map +1 -0
  232. package/build/payments/p2sh.d.ts +159 -1
  233. package/build/payments/p2sh.d.ts.map +1 -0
  234. package/build/payments/p2sh.js +500 -152
  235. package/build/payments/p2sh.js.map +1 -0
  236. package/build/payments/p2tr.d.ts +193 -1
  237. package/build/payments/p2tr.d.ts.map +1 -0
  238. package/build/payments/p2tr.js +592 -174
  239. package/build/payments/p2tr.js.map +1 -0
  240. package/build/payments/p2wpkh.d.ts +170 -1
  241. package/build/payments/p2wpkh.d.ts.map +1 -0
  242. package/build/payments/p2wpkh.js +429 -104
  243. package/build/payments/p2wpkh.js.map +1 -0
  244. package/build/payments/p2wsh.d.ts +155 -1
  245. package/build/payments/p2wsh.d.ts.map +1 -0
  246. package/build/payments/p2wsh.js +466 -144
  247. package/build/payments/p2wsh.js.map +1 -0
  248. package/build/payments/types.d.ts +98 -64
  249. package/build/payments/types.d.ts.map +1 -0
  250. package/build/payments/types.js +17 -13
  251. package/build/payments/types.js.map +1 -0
  252. package/build/psbt/bip371.d.ts +35 -9
  253. package/build/psbt/bip371.d.ts.map +1 -0
  254. package/build/psbt/bip371.js +113 -28
  255. package/build/psbt/bip371.js.map +1 -0
  256. package/build/psbt/psbtutils.d.ts +56 -16
  257. package/build/psbt/psbtutils.d.ts.map +1 -0
  258. package/build/psbt/psbtutils.js +71 -16
  259. package/build/psbt/psbtutils.js.map +1 -0
  260. package/build/psbt/types.d.ts +249 -0
  261. package/build/psbt/types.d.ts.map +1 -0
  262. package/build/psbt/types.js +6 -0
  263. package/build/psbt/types.js.map +1 -0
  264. package/build/psbt/utils.d.ts +68 -0
  265. package/build/psbt/utils.d.ts.map +1 -0
  266. package/build/psbt/utils.js +171 -0
  267. package/build/psbt/utils.js.map +1 -0
  268. package/build/psbt/validation.d.ts +88 -0
  269. package/build/psbt/validation.d.ts.map +1 -0
  270. package/build/psbt/validation.js +149 -0
  271. package/build/psbt/validation.js.map +1 -0
  272. package/build/psbt.d.ts +84 -120
  273. package/build/psbt.d.ts.map +1 -0
  274. package/build/psbt.js +411 -412
  275. package/build/psbt.js.map +1 -0
  276. package/build/pubkey.d.ts +27 -6
  277. package/build/pubkey.d.ts.map +1 -0
  278. package/build/pubkey.js +37 -13
  279. package/build/pubkey.js.map +1 -0
  280. package/build/push_data.d.ts +24 -2
  281. package/build/push_data.d.ts.map +1 -0
  282. package/build/push_data.js +44 -12
  283. package/build/push_data.js.map +1 -0
  284. package/build/script.d.ts +33 -8
  285. package/build/script.d.ts.map +1 -0
  286. package/build/script.js +100 -36
  287. package/build/script.js.map +1 -0
  288. package/build/script_number.d.ts +17 -0
  289. package/build/script_number.d.ts.map +1 -0
  290. package/build/script_number.js +19 -0
  291. package/build/script_number.js.map +1 -0
  292. package/build/script_signature.d.ts +23 -5
  293. package/build/script_signature.d.ts.map +1 -0
  294. package/build/script_signature.js +48 -15
  295. package/build/script_signature.js.map +1 -0
  296. package/build/transaction.d.ts +160 -18
  297. package/build/transaction.d.ts.map +1 -0
  298. package/build/transaction.js +443 -176
  299. package/build/transaction.js.map +1 -0
  300. package/build/tsconfig.build.tsbuildinfo +1 -0
  301. package/build/types.d.ts +36 -38
  302. package/build/types.d.ts.map +1 -0
  303. package/build/types.js +175 -57
  304. package/build/types.js.map +1 -0
  305. package/build/workers/WorkerSigningPool.d.ts +174 -0
  306. package/build/workers/WorkerSigningPool.d.ts.map +1 -0
  307. package/build/workers/WorkerSigningPool.js +553 -0
  308. package/build/workers/WorkerSigningPool.js.map +1 -0
  309. package/build/workers/WorkerSigningPool.node.d.ts +124 -0
  310. package/build/workers/WorkerSigningPool.node.d.ts.map +1 -0
  311. package/build/workers/WorkerSigningPool.node.js +753 -0
  312. package/build/workers/WorkerSigningPool.node.js.map +1 -0
  313. package/build/workers/ecc-bundle.d.ts +25 -0
  314. package/build/workers/ecc-bundle.d.ts.map +1 -0
  315. package/build/workers/ecc-bundle.js +25 -0
  316. package/build/workers/ecc-bundle.js.map +1 -0
  317. package/build/workers/index.d.ts +91 -0
  318. package/build/workers/index.d.ts.map +1 -0
  319. package/build/workers/index.js +114 -0
  320. package/build/workers/index.js.map +1 -0
  321. package/build/workers/psbt-parallel.d.ts +117 -0
  322. package/build/workers/psbt-parallel.d.ts.map +1 -0
  323. package/build/workers/psbt-parallel.js +233 -0
  324. package/build/workers/psbt-parallel.js.map +1 -0
  325. package/build/workers/signing-worker.d.ts +37 -0
  326. package/build/workers/signing-worker.d.ts.map +1 -0
  327. package/build/workers/signing-worker.js +350 -0
  328. package/build/workers/signing-worker.js.map +1 -0
  329. package/build/workers/types.d.ts +365 -0
  330. package/build/workers/types.d.ts.map +1 -0
  331. package/build/workers/types.js +60 -0
  332. package/build/workers/types.js.map +1 -0
  333. package/package.json +83 -25
  334. package/scripts/bundle-ecc.ts +111 -0
  335. package/src/address.ts +81 -44
  336. package/src/bech32utils.ts +3 -3
  337. package/src/bip66.ts +34 -24
  338. package/src/block.ts +196 -84
  339. package/src/branded.ts +18 -0
  340. package/src/crypto.ts +64 -26
  341. package/src/ecc/context.ts +277 -0
  342. package/src/ecc/index.ts +14 -0
  343. package/src/ecc/types.ts +154 -0
  344. package/src/ecpair.d.ts +99 -0
  345. package/src/errors.ts +163 -0
  346. package/src/index.ts +113 -9
  347. package/src/io/BinaryReader.ts +461 -0
  348. package/src/io/BinaryWriter.ts +696 -0
  349. package/src/io/MemoryPool.ts +343 -0
  350. package/src/io/base64.ts +20 -0
  351. package/src/io/hex.ts +155 -0
  352. package/src/io/index.ts +41 -0
  353. package/src/io/utils.ts +283 -0
  354. package/src/merkle.ts +14 -9
  355. package/src/networks.ts +9 -9
  356. package/src/payments/bip341.ts +34 -33
  357. package/src/payments/embed.ts +244 -41
  358. package/src/payments/index.ts +12 -10
  359. package/src/payments/p2ms.ts +490 -118
  360. package/src/payments/p2op.ts +431 -133
  361. package/src/payments/p2pk.ts +370 -72
  362. package/src/payments/p2pkh.ts +524 -130
  363. package/src/payments/p2sh.ts +572 -172
  364. package/src/payments/p2tr.ts +686 -194
  365. package/src/payments/p2wpkh.ts +484 -107
  366. package/src/payments/p2wsh.ts +526 -164
  367. package/src/payments/types.ts +80 -66
  368. package/src/psbt/bip371.ts +68 -51
  369. package/src/psbt/psbtutils.ts +39 -40
  370. package/src/psbt/types.ts +331 -0
  371. package/src/psbt/utils.ts +188 -0
  372. package/src/psbt/validation.ts +192 -0
  373. package/src/psbt.ts +566 -809
  374. package/src/pubkey.ts +24 -25
  375. package/src/push_data.ts +18 -16
  376. package/src/script.ts +82 -64
  377. package/src/script_number.ts +6 -6
  378. package/src/script_signature.ts +33 -36
  379. package/src/transaction.ts +458 -238
  380. package/src/types.ts +231 -100
  381. package/src/workers/WorkerSigningPool.node.ts +887 -0
  382. package/src/workers/WorkerSigningPool.ts +670 -0
  383. package/src/workers/ecc-bundle.ts +26 -0
  384. package/src/workers/index.ts +165 -0
  385. package/src/workers/psbt-parallel.ts +332 -0
  386. package/src/workers/signing-worker.ts +353 -0
  387. package/src/workers/types.ts +413 -0
  388. package/test/address.spec.ts +9 -6
  389. package/test/bitcoin.core.spec.ts +16 -17
  390. package/test/block.spec.ts +8 -7
  391. package/test/bufferutils.spec.ts +228 -214
  392. package/test/crypto.spec.ts +19 -11
  393. package/test/fixtures/p2pk.json +0 -8
  394. package/test/fixtures/p2pkh.json +1 -1
  395. package/test/fixtures/p2sh.json +1 -1
  396. package/test/fixtures/script.json +1 -1
  397. package/test/fixtures/transaction.json +2 -2
  398. package/test/integration/_regtest.ts +25 -0
  399. package/test/integration/addresses.spec.ts +4 -3
  400. package/test/integration/bip32.spec.ts +2 -1
  401. package/test/integration/blocks.spec.ts +1 -1
  402. package/test/integration/cltv.spec.ts +18 -16
  403. package/test/integration/csv.spec.ts +37 -64
  404. package/test/integration/payments.spec.ts +5 -3
  405. package/test/integration/taproot.spec.ts +76 -83
  406. package/test/integration/transactions.spec.ts +38 -35
  407. package/test/payments.spec.ts +35 -13
  408. package/test/payments.utils.ts +17 -16
  409. package/test/psbt.spec.ts +111 -100
  410. package/test/script.spec.ts +11 -10
  411. package/test/script_signature.spec.ts +9 -11
  412. package/test/taproot-cache.spec.ts +694 -0
  413. package/test/transaction.spec.ts +32 -40
  414. package/test/types.spec.ts +74 -29
  415. package/test/workers-pool.spec.ts +963 -0
  416. package/test/workers-signing.spec.ts +635 -0
  417. package/test/workers.spec.ts +1390 -0
  418. package/tsconfig.base.json +34 -18
  419. package/tsconfig.browser.json +15 -0
  420. package/tsconfig.build.json +5 -0
  421. package/tsconfig.json +5 -14
  422. package/vite.config.browser.ts +3 -42
  423. package/vitest.config.integration.ts +11 -0
  424. package/browser/bufferutils.d.ts +0 -34
  425. package/browser/chunks/crypto-BhCpKpek.js +0 -2033
  426. package/browser/chunks/payments-yjA0Evsv.js +0 -1089
  427. package/browser/chunks/psbt-URK2hBFc.js +0 -4039
  428. package/browser/chunks/script-DyPItFEl.js +0 -318
  429. package/browser/chunks/transaction-C_UbhMGn.js +0 -432
  430. package/browser/chunks/utils-DNZi-T5W.js +0 -761
  431. package/browser/ecc_lib.d.ts +0 -3
  432. package/browser/hooks/AdvancedSignatureManager.d.ts +0 -16
  433. package/browser/hooks/HookedSigner.d.ts +0 -4
  434. package/browser/hooks/SignatureManager.d.ts +0 -13
  435. package/browser/payments/lazy.d.ts +0 -2
  436. package/browser/typeforce.d.ts +0 -38
  437. package/build/bufferutils.d.ts +0 -34
  438. package/build/bufferutils.js +0 -141
  439. package/build/ecc_lib.d.ts +0 -3
  440. package/build/ecc_lib.js +0 -61
  441. package/build/hooks/AdvancedSignatureManager.d.ts +0 -16
  442. package/build/hooks/AdvancedSignatureManager.js +0 -52
  443. package/build/hooks/HookedSigner.d.ts +0 -4
  444. package/build/hooks/HookedSigner.js +0 -64
  445. package/build/hooks/SignatureManager.d.ts +0 -13
  446. package/build/hooks/SignatureManager.js +0 -45
  447. package/build/payments/lazy.d.ts +0 -2
  448. package/build/payments/lazy.js +0 -28
  449. package/build/tsconfig.tsbuildinfo +0 -1
  450. package/src/bufferutils.ts +0 -188
  451. package/src/ecc_lib.ts +0 -94
  452. package/src/hooks/AdvancedSignatureManager.ts +0 -104
  453. package/src/hooks/HookedSigner.ts +0 -108
  454. package/src/hooks/SignatureManager.ts +0 -84
  455. package/src/payments/lazy.ts +0 -28
  456. package/src/typeforce.d.ts +0 -38
  457. 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
+ #getDecodedAddress() {
208
+ if (!this.#decodedAddressComputed) {
209
+ if (this.#inputAddress) {
210
+ const decoded = fromBech32(this.#inputAddress);
211
+ if (decoded) {
212
+ this.#decodedAddress = {
213
+ version: decoded.version,
214
+ prefix: decoded.prefix,
215
+ data: decoded.data,
216
+ };
217
+ }
218
+ }
219
+ this.#decodedAddressComputed = true;
220
+ }
221
+ return this.#decodedAddress;
222
+ }
223
+ #makeProgramFromParts() {
224
+ if (typeof this.#inputDeploymentVersion !== 'undefined' &&
225
+ typeof this.#inputHash160 !== 'undefined') {
226
+ if (this.#inputHash160.length !== 20) {
32
227
  throw new TypeError('hash160 must be exactly 20 bytes');
33
- if (a.deploymentVersion < 0 || a.deploymentVersion > 0xff)
228
+ }
229
+ if (this.#inputDeploymentVersion < 0 || this.#inputDeploymentVersion > 0xff) {
34
230
  throw new TypeError('deploymentVersion must fit in one byte');
35
- return Buffer.concat([Buffer.of(a.deploymentVersion), a.hash160]);
231
+ }
232
+ return concat([new Uint8Array([this.#inputDeploymentVersion]), this.#inputHash160]);
36
233
  }
37
234
  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)
235
+ }
236
+ // Private computation methods
237
+ #computeAddress() {
238
+ if (this.#inputAddress) {
239
+ return this.#inputAddress;
240
+ }
241
+ const prog = this.program;
242
+ if (!prog)
243
+ return undefined;
244
+ if (!this.#network.bech32Opnet) {
245
+ throw new TypeError('Network does not support opnet');
246
+ }
247
+ const words = bech32m.toWords(prog);
248
+ words.unshift(P2OP_WITNESS_VERSION);
249
+ return bech32m.encode(this.#network.bech32Opnet, words);
250
+ }
251
+ #computeProgram() {
252
+ if (this.#inputProgram) {
253
+ return this.#inputProgram;
254
+ }
255
+ // Build from deployment version + hash160
256
+ const fromParts = this.#makeProgramFromParts();
257
+ if (fromParts) {
51
258
  return fromParts;
52
- if (a.output) {
53
- if (a.output[0] !== OPS.OP_16)
259
+ }
260
+ if (this.#inputOutput) {
261
+ if (this.#inputOutput[0] !== OPS.OP_16) {
54
262
  throw new TypeError('Invalid P2OP script');
55
- let pushPos = 1, progLen;
56
- if (a.output[1] < 0x4c) {
57
- progLen = a.output[1];
263
+ }
264
+ let pushPos = 1;
265
+ let progLen;
266
+ if (this.#inputOutput[1] < 0x4c) {
267
+ progLen = this.#inputOutput[1];
58
268
  pushPos = 2;
59
269
  }
60
- else if (a.output[1] === 0x4c) {
61
- progLen = a.output[2];
270
+ else if (this.#inputOutput[1] === 0x4c) {
271
+ progLen = this.#inputOutput[2];
62
272
  pushPos = 3;
63
273
  }
64
274
  else {
65
275
  throw new TypeError('Unsupported push opcode in P2OP script');
66
276
  }
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');
277
+ return this.#inputOutput.subarray(pushPos, pushPos + progLen);
94
278
  }
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)
279
+ if (this.#inputAddress) {
280
+ return this.#getDecodedAddress()?.data;
281
+ }
282
+ return undefined;
283
+ }
284
+ #computeDeploymentVersion() {
285
+ if (this.#inputDeploymentVersion !== undefined) {
286
+ return this.#inputDeploymentVersion;
287
+ }
288
+ const prog = this.program;
289
+ if (!prog)
290
+ return undefined;
291
+ return prog[0];
292
+ }
293
+ #computeHash160() {
294
+ if (this.#inputHash160) {
295
+ return this.#inputHash160;
296
+ }
297
+ const prog = this.program;
298
+ if (!prog)
299
+ return undefined;
300
+ return prog.subarray(1);
301
+ }
302
+ #computeOutput() {
303
+ if (this.#inputOutput) {
304
+ return this.#inputOutput;
305
+ }
306
+ const prog = this.program;
307
+ if (!prog)
308
+ return undefined;
309
+ return bscript.compile([OPS.OP_16, prog]);
310
+ }
311
+ // Validation
312
+ #validate() {
313
+ let prog = alloc(0);
314
+ if (this.#inputAddress) {
315
+ const dec = this.#getDecodedAddress();
316
+ if (!dec) {
317
+ throw new TypeError('Invalid address');
318
+ }
319
+ if (this.#network.bech32Opnet !== dec.prefix) {
104
320
  throw new TypeError('Invalid prefix or network mismatch');
105
- if (dec.version !== P2OP_WITNESS_VERSION)
321
+ }
322
+ if (dec.version !== P2OP_WITNESS_VERSION) {
106
323
  throw new TypeError('Invalid witness version for p2op');
107
- if (dec.data.length < MIN_SIZE || dec.data.length > MAX_SIZE)
324
+ }
325
+ if (dec.data.length < MIN_SIZE || dec.data.length > MAX_SIZE) {
108
326
  throw new TypeError('Invalid witness program length');
327
+ }
109
328
  prog = dec.data;
110
329
  }
111
- if (a.program) {
112
- if (prog.length && !prog.equals(a.program))
330
+ if (this.#inputProgram) {
331
+ if (prog.length > 0 && !equals(prog, this.#inputProgram)) {
113
332
  throw new TypeError('Program mismatch');
114
- prog = a.program;
333
+ }
334
+ prog = this.#inputProgram;
115
335
  }
116
- if (!prog.length && a.deploymentVersion !== undefined && a.hash160) {
117
- prog = makeProgramFromParts();
336
+ if (!prog.length && this.#inputDeploymentVersion !== undefined && this.#inputHash160) {
337
+ const made = this.#makeProgramFromParts();
338
+ if (made)
339
+ prog = made;
118
340
  }
119
- if (a.output) {
120
- const outProg = o.program;
121
- if (prog.length && !prog.equals(outProg))
341
+ if (this.#inputOutput) {
342
+ const outProg = this.program;
343
+ if (!outProg) {
344
+ throw new TypeError('Output program is required');
345
+ }
346
+ if (prog.length > 0 && !equals(prog, outProg)) {
122
347
  throw new TypeError('Program mismatch (output vs other source)');
348
+ }
123
349
  prog = outProg;
124
350
  }
125
- if (prog.length < MIN_SIZE || prog.length > MAX_SIZE)
351
+ if (prog.length < MIN_SIZE || prog.length > MAX_SIZE) {
126
352
  throw new TypeError(`Witness program must be 2–40 bytes. Was ${prog.length} bytes`);
127
- if (a.deploymentVersion !== undefined && a.deploymentVersion !== prog[0])
353
+ }
354
+ if (this.#inputDeploymentVersion !== undefined &&
355
+ this.#inputDeploymentVersion !== prog[0]) {
128
356
  throw new TypeError('deploymentVersion mismatch');
129
- if (a.hash160 && !a.hash160.equals(prog.subarray(1)))
357
+ }
358
+ if (this.#inputHash160 && !equals(this.#inputHash160, prog.subarray(1))) {
130
359
  throw new TypeError('hash160 mismatch');
360
+ }
361
+ }
362
+ /**
363
+ * Converts to a plain P2OPPayment object for backwards compatibility.
364
+ *
365
+ * @returns A P2OPPayment object
366
+ */
367
+ toPayment() {
368
+ return {
369
+ name: this.name,
370
+ network: this.network,
371
+ address: this.address,
372
+ program: this.program,
373
+ deploymentVersion: this.deploymentVersion,
374
+ hash160: this.hash160,
375
+ output: this.output,
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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"}