@btc-vision/bitcoin 6.5.6 → 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 (455) 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 +56 -9
  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 +12482 -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 +57 -10
  115. package/build/address.d.ts.map +1 -0
  116. package/build/address.js +80 -24
  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 +204 -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 +36 -9
  203. package/build/payments/bip341.d.ts.map +1 -0
  204. package/build/payments/bip341.js +35 -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 -152
  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 +429 -104
  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 +466 -144
  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 +113 -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 +411 -412
  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 +100 -36
  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 +175 -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 +66 -8
  332. package/scripts/bundle-ecc.ts +111 -0
  333. package/src/address.ts +81 -44
  334. package/src/bech32utils.ts +3 -3
  335. package/src/bip66.ts +34 -24
  336. package/src/block.ts +196 -84
  337. package/src/branded.ts +18 -0
  338. package/src/crypto.ts +64 -26
  339. package/src/ecc/context.ts +277 -0
  340. package/src/ecc/index.ts +14 -0
  341. package/src/ecc/types.ts +154 -0
  342. package/src/ecpair.d.ts +99 -0
  343. package/src/errors.ts +163 -0
  344. package/src/index.ts +113 -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 +34 -33
  355. package/src/payments/embed.ts +244 -41
  356. package/src/payments/index.ts +12 -10
  357. package/src/payments/p2ms.ts +490 -118
  358. package/src/payments/p2op.ts +431 -133
  359. package/src/payments/p2pk.ts +370 -72
  360. package/src/payments/p2pkh.ts +524 -130
  361. package/src/payments/p2sh.ts +572 -172
  362. package/src/payments/p2tr.ts +686 -194
  363. package/src/payments/p2wpkh.ts +484 -107
  364. package/src/payments/p2wsh.ts +526 -164
  365. package/src/payments/types.ts +80 -66
  366. package/src/psbt/bip371.ts +68 -51
  367. package/src/psbt/psbtutils.ts +39 -40
  368. package/src/psbt/types.ts +331 -0
  369. package/src/psbt/utils.ts +188 -0
  370. package/src/psbt/validation.ts +192 -0
  371. package/src/psbt.ts +566 -809
  372. package/src/pubkey.ts +22 -23
  373. package/src/push_data.ts +18 -16
  374. package/src/script.ts +82 -64
  375. package/src/script_number.ts +6 -6
  376. package/src/script_signature.ts +33 -36
  377. package/src/transaction.ts +458 -238
  378. package/src/types.ts +231 -100
  379. package/src/workers/WorkerSigningPool.node.ts +887 -0
  380. package/src/workers/WorkerSigningPool.ts +670 -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 +332 -0
  384. package/src/workers/signing-worker.ts +353 -0
  385. package/src/workers/types.ts +413 -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/vite.config.browser.ts +3 -42
  421. package/vitest.config.integration.ts +2 -0
  422. package/browser/bufferutils.d.ts +0 -34
  423. package/browser/chunks/crypto-BhCpKpek.js +0 -2033
  424. package/browser/chunks/payments-B1wlSccx.js +0 -1089
  425. package/browser/chunks/psbt-BCNk7JUx.js +0 -4055
  426. package/browser/chunks/script-DyPItFEl.js +0 -318
  427. package/browser/chunks/transaction-C_UbhMGn.js +0 -432
  428. package/browser/chunks/utils-DNZi-T5W.js +0 -761
  429. package/browser/ecc_lib.d.ts +0 -3
  430. package/browser/hooks/AdvancedSignatureManager.d.ts +0 -16
  431. package/browser/hooks/HookedSigner.d.ts +0 -4
  432. package/browser/hooks/SignatureManager.d.ts +0 -13
  433. package/browser/payments/lazy.d.ts +0 -2
  434. package/browser/typeforce.d.ts +0 -38
  435. package/build/bufferutils.d.ts +0 -34
  436. package/build/bufferutils.js +0 -141
  437. package/build/ecc_lib.d.ts +0 -3
  438. package/build/ecc_lib.js +0 -61
  439. package/build/hooks/AdvancedSignatureManager.d.ts +0 -16
  440. package/build/hooks/AdvancedSignatureManager.js +0 -52
  441. package/build/hooks/HookedSigner.d.ts +0 -4
  442. package/build/hooks/HookedSigner.js +0 -64
  443. package/build/hooks/SignatureManager.d.ts +0 -13
  444. package/build/hooks/SignatureManager.js +0 -45
  445. package/build/payments/lazy.d.ts +0 -2
  446. package/build/payments/lazy.js +0 -28
  447. package/build/tsconfig.tsbuildinfo +0 -1
  448. package/src/bufferutils.ts +0 -188
  449. package/src/ecc_lib.ts +0 -94
  450. package/src/hooks/AdvancedSignatureManager.ts +0 -104
  451. package/src/hooks/HookedSigner.ts +0 -108
  452. package/src/hooks/SignatureManager.ts +0 -84
  453. package/src/payments/lazy.ts +0 -28
  454. package/src/typeforce.d.ts +0 -38
  455. 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
+ Script,
12
+ Signature,
13
+ SchnorrSignature,
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 { isTapleaf, isTaptree } from '../types.js';
20
+ import type { Tapleaf, Taptree, XOnlyPublicKey, Bytes32 } 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,34 @@ 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 ? new Uint8Array(tapInternalKey) as XOnlyPublicKey : undefined;
141
+ const tapMerkleRootBuf = input.tapMerkleRoot ? new Uint8Array(input.tapMerkleRoot) as Bytes32 : undefined;
142
+ const outputKey = tapInternalKeyBuf && tweakKey(tapInternalKeyBuf, tapMerkleRootBuf);
138
143
 
139
144
  if (!outputKey)
140
145
  throw new Error(
141
146
  `Cannot tweak tap internal key for input #${inputIndex}. Public key: ${
142
- tapInternalKey && tapInternalKey.toString('hex')
147
+ tapInternalKeyBuf &&
148
+ Array.from(tapInternalKeyBuf)
149
+ .map((b) => b.toString(16).padStart(2, '0'))
150
+ .join('')
143
151
  }`,
144
152
  );
145
153
  return outputKey.x;
@@ -168,10 +176,10 @@ export function tapTreeToList(tree: Taptree): TapLeaf[] {
168
176
  * @returns the corresponding taptree, or throws an exception if the tree cannot be reconstructed
169
177
  */
170
178
  export function tapTreeFromList(leaves: TapLeaf[] = []): Taptree {
171
- if (leaves.length === 1 && leaves[0].depth === 0)
179
+ if (leaves.length === 1 && leaves[0]!.depth === 0)
172
180
  return {
173
- output: leaves[0].script,
174
- version: leaves[0].leafVersion,
181
+ output: new Uint8Array(leaves[0]!.script),
182
+ version: leaves[0]!.leafVersion,
175
183
  };
176
184
 
177
185
  return insertLeavesInTree(leaves);
@@ -182,8 +190,8 @@ export function checkTaprootInputForSigs(input: PsbtInput, action: string): bool
182
190
  return sigs.some((sig) => signatureBlocksAction(sig, decodeSchnorrSignature, action));
183
191
  }
184
192
 
185
- function decodeSchnorrSignature(signature: Buffer): {
186
- signature: Buffer;
193
+ function decodeSchnorrSignature(signature: Uint8Array): {
194
+ signature: Uint8Array;
187
195
  hashType: number;
188
196
  } {
189
197
  return {
@@ -192,23 +200,27 @@ function decodeSchnorrSignature(signature: Buffer): {
192
200
  };
193
201
  }
194
202
 
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));
203
+ function extractTaprootSigs(input: PsbtInput): Uint8Array[] {
204
+ const sigs: Uint8Array[] = [];
205
+ if (input.tapKeySig) sigs.push(new Uint8Array(input.tapKeySig));
206
+ if (input.tapScriptSig)
207
+ sigs.push(...input.tapScriptSig.map((s) => new Uint8Array(s.signature)));
199
208
  if (!sigs.length) {
200
- const finalTapKeySig = getTapKeySigFromWitness(input.finalScriptWitness);
209
+ const finalTapKeySig = getTapKeySigFromWitness(
210
+ input.finalScriptWitness ? new Uint8Array(input.finalScriptWitness) : undefined,
211
+ );
201
212
  if (finalTapKeySig) sigs.push(finalTapKeySig);
202
213
  }
203
214
 
204
215
  return sigs;
205
216
  }
206
217
 
207
- export function getTapKeySigFromWitness(finalScriptWitness?: Buffer): Buffer | undefined {
218
+ export function getTapKeySigFromWitness(finalScriptWitness?: Uint8Array): Uint8Array | undefined {
208
219
  if (!finalScriptWitness) return;
209
220
  const witness = finalScriptWitness.subarray(2);
210
221
  // todo: add schnorr signature validation
211
222
  if (witness.length === 64 || witness.length === 65) return witness;
223
+ return undefined;
212
224
  }
213
225
 
214
226
  function _tapTreeToList(tree: Taptree, leaves: TapLeaf[] = [], depth = 0): TapLeaf[] {
@@ -245,7 +257,7 @@ function insertLeafInTree(leaf: TapLeaf, tree?: PartialTaptree, depth = 0): Part
245
257
  if (leaf.depth === depth) {
246
258
  if (!tree)
247
259
  return {
248
- output: leaf.script,
260
+ output: new Uint8Array(leaf.script),
249
261
  version: leaf.leafVersion,
250
262
  };
251
263
  return;
@@ -257,6 +269,7 @@ function insertLeafInTree(leaf: TapLeaf, tree?: PartialTaptree, depth = 0): Part
257
269
 
258
270
  const rightSide = insertLeafInTree(leaf, tree && tree[1], depth + 1);
259
271
  if (rightSide) return [tree && tree[0], rightSide];
272
+ return undefined;
260
273
  }
261
274
 
262
275
  function checkMixedTaprootAndNonTaprootInputFields(
@@ -307,17 +320,19 @@ function checkMixedTaprootAndNonTaprootOutputFields(
307
320
  */
308
321
  function checkIfTapLeafInTree(inputData: PsbtInput, newInputData: PsbtInput, action: string): void {
309
322
  if (newInputData.tapMerkleRoot) {
323
+ const merkleRoot = new Uint8Array(newInputData.tapMerkleRoot);
310
324
  const newLeafsInTree = (newInputData.tapLeafScript || []).every((l) =>
311
- isTapLeafInTree(l, newInputData.tapMerkleRoot),
325
+ isTapLeafInTree(l, merkleRoot),
312
326
  );
313
327
  const oldLeafsInTree = (inputData.tapLeafScript || []).every((l) =>
314
- isTapLeafInTree(l, newInputData.tapMerkleRoot),
328
+ isTapLeafInTree(l, merkleRoot),
315
329
  );
316
330
  if (!newLeafsInTree || !oldLeafsInTree)
317
331
  throw new Error(`Invalid arguments for Psbt.${action}. Tapleaf not part of taptree.`);
318
332
  } else if (inputData.tapMerkleRoot) {
333
+ const merkleRoot = new Uint8Array(inputData.tapMerkleRoot);
319
334
  const newLeafsInTree = (newInputData.tapLeafScript || []).every((l) =>
320
- isTapLeafInTree(l, inputData.tapMerkleRoot),
335
+ isTapLeafInTree(l, merkleRoot),
321
336
  );
322
337
  if (!newLeafsInTree)
323
338
  throw new Error(`Invalid arguments for Psbt.${action}. Tapleaf not part of taptree.`);
@@ -330,16 +345,16 @@ function checkIfTapLeafInTree(inputData: PsbtInput, newInputData: PsbtInput, act
330
345
  * @param merkleRoot The Merkle root of the tree. If not provided, the function assumes the TapLeafScript is present.
331
346
  * @returns A boolean indicating whether the TapLeafScript is present in the tree.
332
347
  */
333
- function isTapLeafInTree(tapLeaf: TapLeafScript, merkleRoot?: Buffer): boolean {
348
+ function isTapLeafInTree(tapLeaf: TapLeafScript, merkleRoot?: Uint8Array): boolean {
334
349
  if (!merkleRoot) return true;
335
350
 
336
351
  const leafHash = tapleafHash({
337
- output: tapLeaf.script,
352
+ output: new Uint8Array(tapLeaf.script),
338
353
  version: tapLeaf.leafVersion,
339
354
  });
340
355
 
341
- const rootHash = rootHashFromPath(tapLeaf.controlBlock, leafHash);
342
- return rootHash.equals(merkleRoot);
356
+ const rootHash = rootHashFromPath(new Uint8Array(tapLeaf.controlBlock), leafHash);
357
+ return equals(rootHash, merkleRoot);
343
358
  }
344
359
 
345
360
  /**
@@ -347,19 +362,20 @@ function isTapLeafInTree(tapLeaf: TapLeafScript, merkleRoot?: Buffer): boolean {
347
362
  *
348
363
  * @param input - The PsbtInput object.
349
364
  * @param tapLeaf - The TapLeafScript object.
350
- * @returns An array of sorted signatures as Buffers.
365
+ * @returns An array of sorted signatures as Uint8Arrays.
351
366
  */
352
- function sortSignatures(input: PsbtInput, tapLeaf: TapLeafScript): Buffer[] {
367
+ function sortSignatures(input: PsbtInput, tapLeaf: TapLeafScript): Uint8Array[] {
368
+ const tapLeafScript = new Uint8Array(tapLeaf.script);
353
369
  const leafHash = tapleafHash({
354
- output: tapLeaf.script,
370
+ output: tapLeafScript,
355
371
  version: tapLeaf.leafVersion,
356
372
  });
357
373
 
358
374
  return (input.tapScriptSig || [])
359
- .filter((tss) => tss.leafHash.equals(leafHash))
360
- .map((tss) => addPubkeyPositionInScript(tapLeaf.script, tss))
375
+ .filter((tss) => equals(new Uint8Array(tss.leafHash), leafHash))
376
+ .map((tss) => addPubkeyPositionInScript(tapLeafScript, tss))
361
377
  .sort((t1, t2) => t2.positionInScript - t1.positionInScript)
362
- .map((t) => t.signature);
378
+ .map((t) => new Uint8Array(t.signature));
363
379
  }
364
380
 
365
381
  /**
@@ -368,10 +384,10 @@ function sortSignatures(input: PsbtInput, tapLeaf: TapLeafScript): Buffer[] {
368
384
  * @param tss The TapScriptSig object to add the position to.
369
385
  * @returns A TapScriptSigWitPosition object with the added position.
370
386
  */
371
- function addPubkeyPositionInScript(script: Buffer, tss: TapScriptSig): TapScriptSigWitPosition {
387
+ function addPubkeyPositionInScript(script: Uint8Array, tss: TapScriptSig): TapScriptSigWitPosition {
372
388
  return Object.assign(
373
389
  {
374
- positionInScript: pubkeyPositionInScript(tss.pubkey, script),
390
+ positionInScript: pubkeyPositionInScript(new Uint8Array(tss.pubkey), script),
375
391
  },
376
392
  tss,
377
393
  ) as TapScriptSigWitPosition;
@@ -383,7 +399,7 @@ function addPubkeyPositionInScript(script: Buffer, tss: TapScriptSig): TapScript
383
399
  function findTapLeafToFinalize(
384
400
  input: PsbtInput,
385
401
  inputIndex: number,
386
- leafHashToFinalize?: Buffer,
402
+ leafHashToFinalize?: Uint8Array,
387
403
  ): TapLeafScript {
388
404
  const { tapScriptSig } = input;
389
405
  if (!tapScriptSig || !tapScriptSig.length)
@@ -413,15 +429,16 @@ function findTapLeafToFinalize(
413
429
  function canFinalizeLeaf(
414
430
  leaf: TapLeafScript,
415
431
  tapScriptSig: TapScriptSig[],
416
- hash?: Buffer,
432
+ hash?: Uint8Array,
417
433
  ): boolean {
418
434
  const leafHash = tapleafHash({
419
- output: leaf.script,
435
+ output: new Uint8Array(leaf.script),
420
436
  version: leaf.leafVersion,
421
437
  });
422
- const whiteListedHash = !hash || hash.equals(leafHash);
438
+ const whiteListedHash = !hash || equals(hash, leafHash);
423
439
  return (
424
- whiteListedHash && tapScriptSig.find((tss) => tss.leafHash.equals(leafHash)) !== undefined
440
+ whiteListedHash &&
441
+ tapScriptSig.find((tss) => equals(new Uint8Array(tss.leafHash), leafHash)) !== undefined
425
442
  );
426
443
  }
427
444