@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
@@ -4,133 +4,147 @@
4
4
  */
5
5
 
6
6
  import type { Network } from '../networks.js';
7
- import type { Taptree } from '../types.js';
8
-
9
- export enum PaymentType {
10
- P2PK = 'p2pk',
11
- P2PKH = 'p2pkh',
12
- P2SH = 'p2sh',
13
- P2MS = 'p2ms',
14
- P2WPKH = 'p2wpkh',
15
- P2WSH = 'p2wsh',
16
- P2TR = 'p2tr',
17
- P2OP = 'p2op',
18
- Embed = 'embed',
19
- ScriptRedeem = 'scriptRedeem',
20
- }
7
+ import type {
8
+ Bytes20,
9
+ Bytes32,
10
+ PublicKey,
11
+ SchnorrSignature,
12
+ Script,
13
+ Signature,
14
+ Taptree,
15
+ XOnlyPublicKey,
16
+ } from '../types.js';
17
+
18
+ export const PaymentType = {
19
+ P2PK: 'p2pk',
20
+ P2PKH: 'p2pkh',
21
+ P2SH: 'p2sh',
22
+ P2MS: 'p2ms',
23
+ P2WPKH: 'p2wpkh',
24
+ P2WSH: 'p2wsh',
25
+ P2TR: 'p2tr',
26
+ P2OP: 'p2op',
27
+ Embed: 'embed',
28
+ ScriptRedeem: 'scriptRedeem',
29
+ } as const;
30
+
31
+ export type PaymentType = (typeof PaymentType)[keyof typeof PaymentType];
21
32
 
22
33
  export interface BasePayment {
23
- /** Convenience label, also the discriminant for the union. */
24
- name?: PaymentType;
34
+ /** Convenience label, also the discriminant for the union. Can be dynamic for nested types. */
35
+ readonly name?: string | undefined;
25
36
  /** Network parameters (mainnet if omitted). */
26
- network?: Network;
37
+ readonly network?: Network | undefined;
27
38
  /** Fully-assembled scriptPubKey (if already known). */
28
- output?: Buffer;
39
+ readonly output?: Script | undefined;
29
40
  /** Raw scriptSig (legacy script types only). */
30
- input?: Buffer;
41
+ readonly input?: Script | undefined;
31
42
  /** Human-readable address (if already known). */
32
- address?: string;
43
+ readonly address?: string | undefined;
33
44
  /** Segwit stack (empty for legacy). */
34
- witness?: Buffer[];
45
+ readonly witness?: Uint8Array[] | undefined;
35
46
 
36
47
  /** Script template for P2SH, P2WSH, P2TR, etc. */
37
- redeem?: ScriptRedeem;
48
+ readonly redeem?: ScriptRedeem | undefined;
38
49
 
39
50
  /** Non-standard options used by some wallets. */
40
- useHybrid?: boolean;
41
- useUncompressed?: boolean;
51
+ readonly useHybrid?: boolean | undefined;
52
+ readonly useUncompressed?: boolean | undefined;
42
53
  }
43
54
 
44
55
  /** Helper used by redeeming script-template outputs (P2SH, P2WSH). */
45
56
  export interface ScriptRedeem extends BasePayment {
46
- output?: Buffer; // script template
47
- redeemVersion?: number; // tapscript leaves etc.
48
- network?: Network; // network parameters (mainnet if omitted)
57
+ readonly output?: Script | undefined; // script template
58
+ readonly redeemVersion?: number | undefined; // tapscript leaves etc.
59
+ readonly network?: Network | undefined; // network parameters (mainnet if omitted)
49
60
  }
50
61
 
51
62
  export interface P2PKPayment extends BasePayment {
52
- name: PaymentType.P2PK;
53
- pubkey?: Buffer;
63
+ readonly name: typeof PaymentType.P2PK;
64
+ readonly pubkey?: PublicKey | undefined;
54
65
  /** DER-encoded sig – empty until signed. */
55
- signature?: Buffer;
66
+ readonly signature?: Signature | undefined;
56
67
  }
57
68
 
58
69
  export interface P2PKHPayment extends BasePayment {
59
- name: PaymentType.P2PKH;
70
+ readonly name: typeof PaymentType.P2PKH;
60
71
  /** RIPEMD-160(SHA-256(pubkey)) – 20 bytes. */
61
- hash?: Buffer;
62
- pubkey?: Buffer;
63
- signature?: Buffer;
72
+ readonly hash?: Bytes20 | undefined;
73
+ readonly pubkey?: PublicKey | undefined;
74
+ readonly signature?: Signature | undefined;
64
75
  }
65
76
 
66
77
  export interface P2SHPayment extends BasePayment {
67
- name: PaymentType.P2SH;
78
+ /** Dynamic name like 'p2sh' or 'p2sh-p2wpkh' for nested types */
79
+ readonly name: string;
68
80
  /** Hash160 of a redeem script. */
69
- hash?: Buffer;
81
+ readonly hash?: Bytes20 | undefined;
70
82
 
71
83
  /** The entire signature stack when spending a P2SH (non-segwit). */
72
- signatures?: Buffer[];
84
+ readonly signatures?: Uint8Array[] | undefined;
73
85
  }
74
86
 
75
87
  export interface P2MSPayment extends BasePayment {
76
- name: PaymentType.P2MS;
88
+ /** Dynamic name like 'p2ms' or 'p2ms(2 of 3)' with M-of-N parameters */
89
+ readonly name: string;
77
90
  /** M-of-N parameters. */
78
- m?: number;
79
- n?: number;
80
- pubkeys?: Buffer[];
81
- signatures?: Buffer[];
91
+ readonly m?: number | undefined;
92
+ readonly n?: number | undefined;
93
+ readonly pubkeys?: PublicKey[] | undefined;
94
+ readonly signatures?: Signature[] | undefined;
82
95
  }
83
96
 
84
97
  export interface P2WPKHPayment extends BasePayment {
85
- name: PaymentType.P2WPKH;
98
+ readonly name: typeof PaymentType.P2WPKH;
86
99
  /** 20-byte witness program. */
87
- hash?: Buffer;
88
- pubkey?: Buffer;
89
- signature?: Buffer;
100
+ readonly hash?: Bytes20 | undefined;
101
+ readonly pubkey?: PublicKey | undefined;
102
+ readonly signature?: Signature | undefined;
90
103
  }
91
104
 
92
105
  export interface P2WSHPayment extends BasePayment {
93
- name: PaymentType.P2WSH;
106
+ /** Dynamic name like 'p2wsh' or 'p2wsh-p2pk' for nested types */
107
+ readonly name: string;
94
108
  /** 32-byte witness program. */
95
- hash?: Buffer;
96
- redeem?: ScriptRedeem;
109
+ readonly hash?: Bytes32 | undefined;
110
+ readonly redeem?: ScriptRedeem | undefined;
97
111
  }
98
112
 
99
113
  export interface P2TRPayment extends BasePayment {
100
- name: PaymentType.P2TR;
114
+ readonly name: typeof PaymentType.P2TR;
101
115
  /** x-only pubkey that commits to the tree. */
102
- pubkey?: Buffer;
116
+ readonly pubkey?: XOnlyPublicKey | undefined;
103
117
  /** Internal (untweaked) x-only pubkey. */
104
- internalPubkey?: Buffer;
118
+ readonly internalPubkey?: XOnlyPublicKey | undefined;
105
119
  /** Merkle-root tweak, present when a script path exists. */
106
- hash?: Buffer;
120
+ readonly hash?: Bytes32 | undefined;
107
121
  /** Full taptree description (optional, dev-side). */
108
- scriptTree?: Taptree;
122
+ readonly scriptTree?: Taptree | undefined;
109
123
  /** Key-path sig or leading stack elem. */
110
- signature?: Buffer;
124
+ readonly signature?: SchnorrSignature | undefined;
111
125
 
112
- redeemVersion?: number; // tapscript leaves etc.
113
- redeem?: ScriptRedeem;
126
+ readonly redeemVersion?: number | undefined; // tapscript leaves etc.
127
+ readonly redeem?: ScriptRedeem | undefined;
114
128
  }
115
129
 
116
130
  export interface P2OPPayment extends BasePayment {
117
- name: PaymentType.P2OP;
131
+ readonly name: typeof PaymentType.P2OP;
118
132
  /** <deploymentVersion || HASH160(payload)> (2–40 bytes). */
119
- program?: Buffer;
120
- deploymentVersion: number | undefined;
133
+ readonly program?: Uint8Array | undefined;
134
+ readonly deploymentVersion?: number | undefined;
121
135
  /** Convenience slice of `program` (20 bytes for current spec). */
122
- hash160?: Buffer;
136
+ readonly hash160?: Bytes20 | undefined;
123
137
  }
124
138
 
125
139
  export interface P2OPPaymentParams extends Omit<P2OPPayment, 'name' | 'deploymentVersion'> {
126
- deploymentVersion?: number;
140
+ readonly deploymentVersion?: number | undefined;
127
141
  }
128
142
 
129
143
  /** OP_RETURN data-carrying output */
130
144
  export interface EmbedPayment extends BasePayment {
131
- name: PaymentType.Embed;
145
+ readonly name: typeof PaymentType.Embed;
132
146
  /** Raw pushed chunks after OP_RETURN. */
133
- data: Buffer[];
147
+ readonly data: Uint8Array[];
134
148
  // `output` is automatically derived from `data` (or vice-versa)
135
149
  }
136
150
 
@@ -149,6 +163,6 @@ export type Payment =
149
163
  export type PaymentCreator = <T extends BasePayment>(a: T, opts?: PaymentOpts) => T;
150
164
 
151
165
  export interface PaymentOpts {
152
- validate?: boolean;
153
- allowIncomplete?: boolean;
166
+ readonly validate?: boolean;
167
+ readonly allowIncomplete?: boolean;
154
168
  }
@@ -1,4 +1,4 @@
1
- import {
1
+ import type {
2
2
  PsbtInput,
3
3
  PsbtOutput,
4
4
  TapInternalKey,
@@ -6,7 +6,7 @@ import {
6
6
  TapLeafScript,
7
7
  TapScriptSig,
8
8
  TapTree,
9
- } from 'bip174/src/lib/interfaces.js';
9
+ } from 'bip174';
10
10
  import {
11
11
  LEAF_VERSION_TAPSCRIPT,
12
12
  MAX_TAPTREE_DEPTH,
@@ -15,9 +15,10 @@ import {
15
15
  tweakKey,
16
16
  } from '../payments/bip341.js';
17
17
  import { p2tr } from '../payments/p2tr.js';
18
- import { toXOnly } from '../pubkey.js';
19
18
  import { Transaction } from '../transaction.js';
20
- import { isTapleaf, isTaptree, Tapleaf, Taptree } from '../types.js';
19
+ import type { Bytes32, Tapleaf, Taptree, XOnlyPublicKey } from '../types.js';
20
+ import { isTapleaf, isTaptree } from '../types.js';
21
+ import { concat, equals } from '../io/index.js';
21
22
  import {
22
23
  isP2TR,
23
24
  pubkeyPositionInScript,
@@ -26,7 +27,7 @@ import {
26
27
  } from './psbtutils.js';
27
28
 
28
29
  interface PsbtOutputWithScript extends PsbtOutput {
29
- script?: Buffer;
30
+ script?: Uint8Array;
30
31
  }
31
32
 
32
33
  /**
@@ -41,25 +42,27 @@ interface PsbtOutputWithScript extends PsbtOutput {
41
42
  export function tapScriptFinalizer(
42
43
  inputIndex: number,
43
44
  input: PsbtInput,
44
- tapLeafHashToFinalize?: Buffer,
45
+ tapLeafHashToFinalize?: Uint8Array,
45
46
  ): {
46
- finalScriptWitness: Buffer | undefined;
47
+ finalScriptWitness: Uint8Array | undefined;
47
48
  } {
48
49
  const tapLeaf = findTapLeafToFinalize(input, inputIndex, tapLeafHashToFinalize);
49
50
 
50
51
  try {
51
52
  const sigs = sortSignatures(input, tapLeaf);
52
- const witness = sigs.concat(tapLeaf.script).concat(tapLeaf.controlBlock);
53
+ const witness = sigs
54
+ .concat(new Uint8Array(tapLeaf.script))
55
+ .concat(new Uint8Array(tapLeaf.controlBlock));
53
56
  return { finalScriptWitness: witnessStackToScriptWitness(witness) };
54
57
  } catch (err) {
55
58
  throw new Error(`Can not finalize taproot input #${inputIndex}: ${err}`);
56
59
  }
57
60
  }
58
61
 
59
- export function serializeTaprootSignature(sig: Buffer, sighashType?: number): Buffer {
60
- const sighashTypeByte = sighashType ? Buffer.from([sighashType]) : Buffer.from([]);
62
+ export function serializeTaprootSignature(sig: Uint8Array, sighashType?: number): Uint8Array {
63
+ const sighashTypeByte = sighashType ? new Uint8Array([sighashType]) : new Uint8Array(0);
61
64
 
62
- return Buffer.concat([sig, sighashTypeByte]);
65
+ return concat([sig, sighashTypeByte]);
63
66
  }
64
67
 
65
68
  export function isTaprootInput(input: PsbtInput): boolean {
@@ -70,12 +73,12 @@ export function isTaprootInput(input: PsbtInput): boolean {
70
73
  input.tapMerkleRoot ||
71
74
  (input.tapLeafScript && input.tapLeafScript.length) ||
72
75
  (input.tapBip32Derivation && input.tapBip32Derivation.length) ||
73
- (input.witnessUtxo && isP2TR(input.witnessUtxo.script))
76
+ (input.witnessUtxo && isP2TR(new Uint8Array(input.witnessUtxo.script)))
74
77
  )
75
78
  );
76
79
  }
77
80
 
78
- export function isTaprootOutput(output: PsbtOutput, script?: Buffer): boolean {
81
+ export function isTaprootOutput(output: PsbtOutput, script?: Uint8Array): boolean {
79
82
  return (
80
83
  output &&
81
84
  !!(
@@ -117,29 +120,38 @@ function checkTaprootScriptPubkey(
117
120
  if (tapInternalKey) {
118
121
  const scriptPubkey = outputData.script;
119
122
  const script = getTaprootScripPubkey(tapInternalKey, tapTree);
120
- if (scriptPubkey && !scriptPubkey.equals(script))
123
+ if (scriptPubkey && !equals(scriptPubkey, script))
121
124
  throw new Error('Error adding output. Script or address missmatch.');
122
125
  }
123
126
  }
124
127
 
125
- function getTaprootScripPubkey(tapInternalKey: TapInternalKey, tapTree?: TapTree): Buffer {
128
+ function getTaprootScripPubkey(tapInternalKey: TapInternalKey, tapTree?: TapTree): Uint8Array {
126
129
  const scriptTree = tapTree && tapTreeFromList(tapTree.leaves);
127
130
  const { output } = p2tr({
128
- internalPubkey: tapInternalKey,
131
+ internalPubkey: new Uint8Array(tapInternalKey) as XOnlyPublicKey,
129
132
  scriptTree,
130
133
  });
131
134
  if (!output) throw new Error('Failed to generate taproot script pubkey');
132
135
  return output;
133
136
  }
134
137
 
135
- export function tweakInternalPubKey(inputIndex: number, input: PsbtInput): Buffer {
138
+ export function tweakInternalPubKey(inputIndex: number, input: PsbtInput): Uint8Array {
136
139
  const tapInternalKey = input.tapInternalKey;
137
- const outputKey = tapInternalKey && tweakKey(tapInternalKey, input.tapMerkleRoot);
140
+ const tapInternalKeyBuf = tapInternalKey
141
+ ? (new Uint8Array(tapInternalKey) as XOnlyPublicKey)
142
+ : undefined;
143
+ const tapMerkleRootBuf = input.tapMerkleRoot
144
+ ? (new Uint8Array(input.tapMerkleRoot) as Bytes32)
145
+ : undefined;
146
+ const outputKey = tapInternalKeyBuf && tweakKey(tapInternalKeyBuf, tapMerkleRootBuf);
138
147
 
139
148
  if (!outputKey)
140
149
  throw new Error(
141
150
  `Cannot tweak tap internal key for input #${inputIndex}. Public key: ${
142
- tapInternalKey && tapInternalKey.toString('hex')
151
+ tapInternalKeyBuf &&
152
+ Array.from(tapInternalKeyBuf)
153
+ .map((b) => b.toString(16).padStart(2, '0'))
154
+ .join('')
143
155
  }`,
144
156
  );
145
157
  return outputKey.x;
@@ -168,10 +180,10 @@ export function tapTreeToList(tree: Taptree): TapLeaf[] {
168
180
  * @returns the corresponding taptree, or throws an exception if the tree cannot be reconstructed
169
181
  */
170
182
  export function tapTreeFromList(leaves: TapLeaf[] = []): Taptree {
171
- if (leaves.length === 1 && leaves[0].depth === 0)
183
+ if (leaves.length === 1 && leaves[0]!.depth === 0)
172
184
  return {
173
- output: leaves[0].script,
174
- version: leaves[0].leafVersion,
185
+ output: new Uint8Array(leaves[0]!.script),
186
+ version: leaves[0]!.leafVersion,
175
187
  };
176
188
 
177
189
  return insertLeavesInTree(leaves);
@@ -182,8 +194,8 @@ export function checkTaprootInputForSigs(input: PsbtInput, action: string): bool
182
194
  return sigs.some((sig) => signatureBlocksAction(sig, decodeSchnorrSignature, action));
183
195
  }
184
196
 
185
- function decodeSchnorrSignature(signature: Buffer): {
186
- signature: Buffer;
197
+ function decodeSchnorrSignature(signature: Uint8Array): {
198
+ signature: Uint8Array;
187
199
  hashType: number;
188
200
  } {
189
201
  return {
@@ -192,23 +204,27 @@ function decodeSchnorrSignature(signature: Buffer): {
192
204
  };
193
205
  }
194
206
 
195
- function extractTaprootSigs(input: PsbtInput): Buffer[] {
196
- const sigs: Buffer[] = [];
197
- if (input.tapKeySig) sigs.push(input.tapKeySig);
198
- if (input.tapScriptSig) sigs.push(...input.tapScriptSig.map((s) => s.signature));
207
+ function extractTaprootSigs(input: PsbtInput): Uint8Array[] {
208
+ const sigs: Uint8Array[] = [];
209
+ if (input.tapKeySig) sigs.push(new Uint8Array(input.tapKeySig));
210
+ if (input.tapScriptSig)
211
+ sigs.push(...input.tapScriptSig.map((s) => new Uint8Array(s.signature)));
199
212
  if (!sigs.length) {
200
- const finalTapKeySig = getTapKeySigFromWitness(input.finalScriptWitness);
213
+ const finalTapKeySig = getTapKeySigFromWitness(
214
+ input.finalScriptWitness ? new Uint8Array(input.finalScriptWitness) : undefined,
215
+ );
201
216
  if (finalTapKeySig) sigs.push(finalTapKeySig);
202
217
  }
203
218
 
204
219
  return sigs;
205
220
  }
206
221
 
207
- export function getTapKeySigFromWitness(finalScriptWitness?: Buffer): Buffer | undefined {
222
+ export function getTapKeySigFromWitness(finalScriptWitness?: Uint8Array): Uint8Array | undefined {
208
223
  if (!finalScriptWitness) return;
209
224
  const witness = finalScriptWitness.subarray(2);
210
225
  // todo: add schnorr signature validation
211
226
  if (witness.length === 64 || witness.length === 65) return witness;
227
+ return undefined;
212
228
  }
213
229
 
214
230
  function _tapTreeToList(tree: Taptree, leaves: TapLeaf[] = [], depth = 0): TapLeaf[] {
@@ -245,7 +261,7 @@ function insertLeafInTree(leaf: TapLeaf, tree?: PartialTaptree, depth = 0): Part
245
261
  if (leaf.depth === depth) {
246
262
  if (!tree)
247
263
  return {
248
- output: leaf.script,
264
+ output: new Uint8Array(leaf.script),
249
265
  version: leaf.leafVersion,
250
266
  };
251
267
  return;
@@ -257,6 +273,7 @@ function insertLeafInTree(leaf: TapLeaf, tree?: PartialTaptree, depth = 0): Part
257
273
 
258
274
  const rightSide = insertLeafInTree(leaf, tree && tree[1], depth + 1);
259
275
  if (rightSide) return [tree && tree[0], rightSide];
276
+ return undefined;
260
277
  }
261
278
 
262
279
  function checkMixedTaprootAndNonTaprootInputFields(
@@ -307,17 +324,19 @@ function checkMixedTaprootAndNonTaprootOutputFields(
307
324
  */
308
325
  function checkIfTapLeafInTree(inputData: PsbtInput, newInputData: PsbtInput, action: string): void {
309
326
  if (newInputData.tapMerkleRoot) {
327
+ const merkleRoot = new Uint8Array(newInputData.tapMerkleRoot);
310
328
  const newLeafsInTree = (newInputData.tapLeafScript || []).every((l) =>
311
- isTapLeafInTree(l, newInputData.tapMerkleRoot),
329
+ isTapLeafInTree(l, merkleRoot),
312
330
  );
313
331
  const oldLeafsInTree = (inputData.tapLeafScript || []).every((l) =>
314
- isTapLeafInTree(l, newInputData.tapMerkleRoot),
332
+ isTapLeafInTree(l, merkleRoot),
315
333
  );
316
334
  if (!newLeafsInTree || !oldLeafsInTree)
317
335
  throw new Error(`Invalid arguments for Psbt.${action}. Tapleaf not part of taptree.`);
318
336
  } else if (inputData.tapMerkleRoot) {
337
+ const merkleRoot = new Uint8Array(inputData.tapMerkleRoot);
319
338
  const newLeafsInTree = (newInputData.tapLeafScript || []).every((l) =>
320
- isTapLeafInTree(l, inputData.tapMerkleRoot),
339
+ isTapLeafInTree(l, merkleRoot),
321
340
  );
322
341
  if (!newLeafsInTree)
323
342
  throw new Error(`Invalid arguments for Psbt.${action}. Tapleaf not part of taptree.`);
@@ -330,16 +349,16 @@ function checkIfTapLeafInTree(inputData: PsbtInput, newInputData: PsbtInput, act
330
349
  * @param merkleRoot The Merkle root of the tree. If not provided, the function assumes the TapLeafScript is present.
331
350
  * @returns A boolean indicating whether the TapLeafScript is present in the tree.
332
351
  */
333
- function isTapLeafInTree(tapLeaf: TapLeafScript, merkleRoot?: Buffer): boolean {
352
+ function isTapLeafInTree(tapLeaf: TapLeafScript, merkleRoot?: Uint8Array): boolean {
334
353
  if (!merkleRoot) return true;
335
354
 
336
355
  const leafHash = tapleafHash({
337
- output: tapLeaf.script,
356
+ output: new Uint8Array(tapLeaf.script),
338
357
  version: tapLeaf.leafVersion,
339
358
  });
340
359
 
341
- const rootHash = rootHashFromPath(tapLeaf.controlBlock, leafHash);
342
- return rootHash.equals(merkleRoot);
360
+ const rootHash = rootHashFromPath(new Uint8Array(tapLeaf.controlBlock), leafHash);
361
+ return equals(rootHash, merkleRoot);
343
362
  }
344
363
 
345
364
  /**
@@ -347,19 +366,20 @@ function isTapLeafInTree(tapLeaf: TapLeafScript, merkleRoot?: Buffer): boolean {
347
366
  *
348
367
  * @param input - The PsbtInput object.
349
368
  * @param tapLeaf - The TapLeafScript object.
350
- * @returns An array of sorted signatures as Buffers.
369
+ * @returns An array of sorted signatures as Uint8Arrays.
351
370
  */
352
- function sortSignatures(input: PsbtInput, tapLeaf: TapLeafScript): Buffer[] {
371
+ function sortSignatures(input: PsbtInput, tapLeaf: TapLeafScript): Uint8Array[] {
372
+ const tapLeafScript = new Uint8Array(tapLeaf.script);
353
373
  const leafHash = tapleafHash({
354
- output: tapLeaf.script,
374
+ output: tapLeafScript,
355
375
  version: tapLeaf.leafVersion,
356
376
  });
357
377
 
358
378
  return (input.tapScriptSig || [])
359
- .filter((tss) => tss.leafHash.equals(leafHash))
360
- .map((tss) => addPubkeyPositionInScript(tapLeaf.script, tss))
379
+ .filter((tss) => equals(new Uint8Array(tss.leafHash), leafHash))
380
+ .map((tss) => addPubkeyPositionInScript(tapLeafScript, tss))
361
381
  .sort((t1, t2) => t2.positionInScript - t1.positionInScript)
362
- .map((t) => t.signature);
382
+ .map((t) => new Uint8Array(t.signature));
363
383
  }
364
384
 
365
385
  /**
@@ -368,10 +388,10 @@ function sortSignatures(input: PsbtInput, tapLeaf: TapLeafScript): Buffer[] {
368
388
  * @param tss The TapScriptSig object to add the position to.
369
389
  * @returns A TapScriptSigWitPosition object with the added position.
370
390
  */
371
- function addPubkeyPositionInScript(script: Buffer, tss: TapScriptSig): TapScriptSigWitPosition {
391
+ function addPubkeyPositionInScript(script: Uint8Array, tss: TapScriptSig): TapScriptSigWitPosition {
372
392
  return Object.assign(
373
393
  {
374
- positionInScript: pubkeyPositionInScript(tss.pubkey, script),
394
+ positionInScript: pubkeyPositionInScript(new Uint8Array(tss.pubkey), script),
375
395
  },
376
396
  tss,
377
397
  ) as TapScriptSigWitPosition;
@@ -383,7 +403,7 @@ function addPubkeyPositionInScript(script: Buffer, tss: TapScriptSig): TapScript
383
403
  function findTapLeafToFinalize(
384
404
  input: PsbtInput,
385
405
  inputIndex: number,
386
- leafHashToFinalize?: Buffer,
406
+ leafHashToFinalize?: Uint8Array,
387
407
  ): TapLeafScript {
388
408
  const { tapScriptSig } = input;
389
409
  if (!tapScriptSig || !tapScriptSig.length)
@@ -413,15 +433,16 @@ function findTapLeafToFinalize(
413
433
  function canFinalizeLeaf(
414
434
  leaf: TapLeafScript,
415
435
  tapScriptSig: TapScriptSig[],
416
- hash?: Buffer,
436
+ hash?: Uint8Array,
417
437
  ): boolean {
418
438
  const leafHash = tapleafHash({
419
- output: leaf.script,
439
+ output: new Uint8Array(leaf.script),
420
440
  version: leaf.leafVersion,
421
441
  });
422
- const whiteListedHash = !hash || hash.equals(leafHash);
442
+ const whiteListedHash = !hash || equals(hash, leafHash);
423
443
  return (
424
- whiteListedHash && tapScriptSig.find((tss) => tss.leafHash.equals(leafHash)) !== undefined
444
+ whiteListedHash &&
445
+ tapScriptSig.find((tss) => equals(new Uint8Array(tss.leafHash), leafHash)) !== undefined
425
446
  );
426
447
  }
427
448