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