@bitgo/abstract-utxo 10.16.0 → 10.18.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 (334) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +9 -13
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +28 -14
  4. package/dist/cjs/src/address/fixedScript.d.ts +4 -9
  5. package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
  6. package/dist/cjs/src/address/fixedScript.js +18 -50
  7. package/dist/cjs/src/descriptor/NamedDescriptor.d.ts +4 -5
  8. package/dist/cjs/src/descriptor/NamedDescriptor.d.ts.map +1 -1
  9. package/dist/cjs/src/descriptor/NamedDescriptor.js +4 -6
  10. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  11. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  12. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +3 -38
  13. package/dist/cjs/src/descriptor/builder/builder.d.ts +2 -3
  14. package/dist/cjs/src/descriptor/builder/builder.d.ts.map +1 -1
  15. package/dist/cjs/src/descriptor/builder/builder.js +1 -1
  16. package/dist/cjs/src/descriptor/builder/parse.d.ts.map +1 -1
  17. package/dist/cjs/src/descriptor/builder/parse.js +3 -3
  18. package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts +2 -2
  19. package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -1
  20. package/dist/cjs/src/descriptor/createWallet/createDescriptors.js +1 -1
  21. package/dist/cjs/src/descriptor/descriptorWallet.d.ts +1 -1
  22. package/dist/cjs/src/descriptor/descriptorWallet.d.ts.map +1 -1
  23. package/dist/cjs/src/descriptor/descriptorWallet.js +1 -1
  24. package/dist/cjs/src/descriptor/index.d.ts +1 -1
  25. package/dist/cjs/src/descriptor/index.d.ts.map +1 -1
  26. package/dist/cjs/src/descriptor/index.js +1 -1
  27. package/dist/cjs/src/descriptor/validatePolicy.d.ts +3 -3
  28. package/dist/cjs/src/descriptor/validatePolicy.d.ts.map +1 -1
  29. package/dist/cjs/src/descriptor/validatePolicy.js +3 -3
  30. package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -1
  31. package/dist/cjs/src/impl/bch/bch.js +6 -38
  32. package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts +15 -5
  33. package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts.map +1 -1
  34. package/dist/cjs/src/impl/btc/inscriptionBuilder.js +43 -55
  35. package/dist/cjs/src/impl/doge/doge.d.ts +2 -1
  36. package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -1
  37. package/dist/cjs/src/impl/doge/doge.js +1 -1
  38. package/dist/cjs/src/impl/ltc/ltc.d.ts +0 -1
  39. package/dist/cjs/src/impl/ltc/ltc.d.ts.map +1 -1
  40. package/dist/cjs/src/impl/ltc/ltc.js +3 -41
  41. package/dist/cjs/src/impl/ltc/tltc.d.ts +0 -1
  42. package/dist/cjs/src/impl/ltc/tltc.d.ts.map +1 -1
  43. package/dist/cjs/src/impl/ltc/tltc.js +3 -40
  44. package/dist/cjs/src/index.d.ts +2 -0
  45. package/dist/cjs/src/index.d.ts.map +1 -1
  46. package/dist/cjs/src/index.js +3 -1
  47. package/dist/cjs/src/keychains.d.ts +5 -0
  48. package/dist/cjs/src/keychains.d.ts.map +1 -1
  49. package/dist/cjs/src/keychains.js +10 -1
  50. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +2 -2
  51. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts +3 -2
  52. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -1
  53. package/dist/cjs/src/offlineVault/descriptor/transaction.js +5 -8
  54. package/dist/cjs/src/recovery/RecoveryProvider.d.ts +1 -3
  55. package/dist/cjs/src/recovery/RecoveryProvider.d.ts.map +1 -1
  56. package/dist/cjs/src/recovery/RecoveryProvider.js +1 -1
  57. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +73 -4
  58. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  59. package/dist/cjs/src/recovery/backupKeyRecovery.js +163 -129
  60. package/dist/cjs/src/recovery/crossChainRecovery.d.ts +5 -5
  61. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
  62. package/dist/cjs/src/recovery/crossChainRecovery.js +22 -121
  63. package/dist/cjs/src/recovery/psbt.d.ts +8 -31
  64. package/dist/cjs/src/recovery/psbt.d.ts.map +1 -1
  65. package/dist/cjs/src/recovery/psbt.js +14 -126
  66. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +3 -3
  67. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  68. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +17 -54
  69. package/dist/cjs/src/transaction/descriptor/index.d.ts +1 -1
  70. package/dist/cjs/src/transaction/descriptor/index.d.ts.map +1 -1
  71. package/dist/cjs/src/transaction/descriptor/index.js +1 -1
  72. package/dist/cjs/src/transaction/descriptor/parse.d.ts +6 -4
  73. package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
  74. package/dist/cjs/src/transaction/descriptor/parse.js +24 -50
  75. package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts +6 -7
  76. package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts.map +1 -1
  77. package/dist/cjs/src/transaction/descriptor/signPsbt.js +19 -18
  78. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +4 -4
  79. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  80. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +10 -38
  81. package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -1
  82. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
  83. package/dist/cjs/src/transaction/explainTransaction.js +3 -2
  84. package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts +5 -3
  85. package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts.map +1 -1
  86. package/dist/cjs/src/transaction/fixedScript/SigningError.js +10 -2
  87. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +2 -1
  88. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  89. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +1 -8
  90. package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -1
  91. package/dist/cjs/src/transaction/fixedScript/parseOutput.js +8 -12
  92. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts +2 -2
  93. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  94. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +36 -11
  95. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +2 -2
  96. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
  97. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +4 -2
  98. package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts +1 -1
  99. package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -1
  100. package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.js +1 -1
  101. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +3 -2
  102. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  103. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +15 -25
  104. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +6 -5
  105. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  106. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +42 -7
  107. package/dist/cjs/src/transaction/outputDifference.d.ts +5 -1
  108. package/dist/cjs/src/transaction/outputDifference.d.ts.map +1 -1
  109. package/dist/cjs/src/transaction/outputDifference.js +6 -2
  110. package/dist/cjs/src/transaction/recipient.d.ts +5 -0
  111. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
  112. package/dist/cjs/src/transaction/recipient.js +14 -1
  113. package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
  114. package/dist/cjs/src/transaction/signTransaction.js +10 -10
  115. package/dist/cjs/src/unspent.d.ts +55 -0
  116. package/dist/cjs/src/unspent.d.ts.map +1 -0
  117. package/dist/cjs/src/unspent.js +12 -0
  118. package/dist/cjs/src/wasmUtil.d.ts +29 -0
  119. package/dist/cjs/src/wasmUtil.d.ts.map +1 -0
  120. package/dist/cjs/src/wasmUtil.js +87 -0
  121. package/dist/cjs/test/unit/address.d.ts +1 -1
  122. package/dist/cjs/test/unit/address.d.ts.map +1 -1
  123. package/dist/cjs/test/unit/address.js +107 -137
  124. package/dist/cjs/test/unit/bip322.js +50 -1
  125. package/dist/cjs/test/unit/coins.js +7 -2
  126. package/dist/cjs/test/unit/customSigner.js +5 -4
  127. package/dist/cjs/test/unit/descriptor/NamedDescriptor.js +37 -4
  128. package/dist/cjs/test/unit/descriptor/builder.js +10 -4
  129. package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.js +37 -4
  130. package/dist/cjs/test/unit/descriptor/descriptorWallet.js +40 -6
  131. package/dist/cjs/test/unit/descriptorAddress.d.ts +2 -2
  132. package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -1
  133. package/dist/cjs/test/unit/descriptorAddress.js +10 -9
  134. package/dist/cjs/test/unit/explainTransaction.js +26 -3
  135. package/dist/cjs/test/unit/keychains.js +40 -1
  136. package/dist/cjs/test/unit/postProcessPrebuild.d.ts +2 -0
  137. package/dist/cjs/test/unit/postProcessPrebuild.d.ts.map +1 -0
  138. package/dist/cjs/test/unit/postProcessPrebuild.js +62 -0
  139. package/dist/cjs/test/unit/prebuildAndSign.d.ts +0 -4
  140. package/dist/cjs/test/unit/prebuildAndSign.d.ts.map +1 -1
  141. package/dist/cjs/test/unit/prebuildAndSign.js +12 -31
  142. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +82 -258
  143. package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts +2 -0
  144. package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts.map +1 -0
  145. package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.js +144 -0
  146. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +41 -37
  147. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts +2 -0
  148. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts.map +1 -0
  149. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.js +186 -0
  150. package/dist/cjs/test/unit/recovery/mock.d.ts +15 -8
  151. package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -1
  152. package/dist/cjs/test/unit/recovery/mock.js +50 -77
  153. package/dist/cjs/test/unit/signTransaction.d.ts +2 -0
  154. package/dist/cjs/test/unit/signTransaction.d.ts.map +1 -0
  155. package/dist/cjs/test/unit/signTransaction.js +244 -0
  156. package/dist/cjs/test/unit/testSpoofTransaction.d.ts +2 -0
  157. package/dist/cjs/test/unit/testSpoofTransaction.d.ts.map +1 -0
  158. package/dist/cjs/test/unit/testSpoofTransaction.js +114 -0
  159. package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.js +46 -12
  160. package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts.map +1 -1
  161. package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.js +38 -4
  162. package/dist/cjs/test/unit/transaction/descriptor/parse.js +22 -19
  163. package/dist/cjs/test/unit/transaction/descriptor/sign.js +60 -16
  164. package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.js +43 -10
  165. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +2 -2
  166. package/dist/cjs/test/unit/transaction/outputDifference.d.ts.map +1 -0
  167. package/dist/cjs/test/unit/transaction/outputDifference.js +117 -0
  168. package/dist/cjs/test/unit/transaction.js +8 -226
  169. package/dist/cjs/test/unit/txFormat.d.ts.map +1 -1
  170. package/dist/cjs/test/unit/txFormat.js +9 -9
  171. package/dist/cjs/test/unit/util/address.d.ts +13 -0
  172. package/dist/cjs/test/unit/util/address.d.ts.map +1 -0
  173. package/dist/cjs/test/unit/util/address.js +15 -0
  174. package/dist/cjs/test/unit/util/index.d.ts +3 -0
  175. package/dist/cjs/test/unit/util/index.d.ts.map +1 -1
  176. package/dist/cjs/test/unit/util/index.js +4 -1
  177. package/dist/cjs/test/unit/util/keychains.d.ts +29 -0
  178. package/dist/cjs/test/unit/util/keychains.d.ts.map +1 -1
  179. package/dist/cjs/test/unit/util/keychains.js +51 -1
  180. package/dist/cjs/test/unit/util/nockBitGo.d.ts +8 -1
  181. package/dist/cjs/test/unit/util/nockBitGo.d.ts.map +1 -1
  182. package/dist/cjs/test/unit/util/nockBitGo.js +17 -1
  183. package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts.map +1 -1
  184. package/dist/cjs/test/unit/util/nockIndexerAPI.js +4 -37
  185. package/dist/cjs/test/unit/util/psbt.d.ts +19 -0
  186. package/dist/cjs/test/unit/util/psbt.d.ts.map +1 -0
  187. package/dist/cjs/test/unit/util/psbt.js +21 -0
  188. package/dist/cjs/test/unit/util/transaction.d.ts +8 -4
  189. package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -1
  190. package/dist/cjs/test/unit/util/transaction.js +22 -2
  191. package/dist/cjs/test/unit/util/unspents.d.ts +66 -8
  192. package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
  193. package/dist/cjs/test/unit/util/unspents.js +130 -15
  194. package/dist/cjs/test/unit/util/utxoCoins.d.ts +13 -0
  195. package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -1
  196. package/dist/cjs/test/unit/util/utxoCoins.js +33 -2
  197. package/dist/cjs/test/unit/wallet.js +4 -4
  198. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  199. package/dist/esm/abstractUtxoCoin.d.ts +9 -13
  200. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  201. package/dist/esm/abstractUtxoCoin.js +30 -16
  202. package/dist/esm/address/fixedScript.d.ts +4 -9
  203. package/dist/esm/address/fixedScript.d.ts.map +1 -1
  204. package/dist/esm/address/fixedScript.js +18 -17
  205. package/dist/esm/descriptor/NamedDescriptor.d.ts +4 -5
  206. package/dist/esm/descriptor/NamedDescriptor.d.ts.map +1 -1
  207. package/dist/esm/descriptor/NamedDescriptor.js +5 -7
  208. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  209. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  210. package/dist/esm/descriptor/assertDescriptorWalletAddress.js +3 -5
  211. package/dist/esm/descriptor/builder/builder.d.ts +2 -3
  212. package/dist/esm/descriptor/builder/builder.d.ts.map +1 -1
  213. package/dist/esm/descriptor/builder/builder.js +1 -1
  214. package/dist/esm/descriptor/builder/parse.d.ts.map +1 -1
  215. package/dist/esm/descriptor/builder/parse.js +3 -3
  216. package/dist/esm/descriptor/createWallet/createDescriptors.d.ts +2 -2
  217. package/dist/esm/descriptor/createWallet/createDescriptors.d.ts.map +1 -1
  218. package/dist/esm/descriptor/createWallet/createDescriptors.js +1 -1
  219. package/dist/esm/descriptor/descriptorWallet.d.ts +1 -1
  220. package/dist/esm/descriptor/descriptorWallet.d.ts.map +1 -1
  221. package/dist/esm/descriptor/descriptorWallet.js +1 -1
  222. package/dist/esm/descriptor/index.d.ts +1 -1
  223. package/dist/esm/descriptor/index.d.ts.map +1 -1
  224. package/dist/esm/descriptor/index.js +1 -1
  225. package/dist/esm/descriptor/validatePolicy.d.ts +3 -3
  226. package/dist/esm/descriptor/validatePolicy.d.ts.map +1 -1
  227. package/dist/esm/descriptor/validatePolicy.js +3 -3
  228. package/dist/esm/impl/bch/bch.d.ts.map +1 -1
  229. package/dist/esm/impl/bch/bch.js +6 -5
  230. package/dist/esm/impl/btc/inscriptionBuilder.d.ts +15 -5
  231. package/dist/esm/impl/btc/inscriptionBuilder.d.ts.map +1 -1
  232. package/dist/esm/impl/btc/inscriptionBuilder.js +44 -23
  233. package/dist/esm/impl/doge/doge.d.ts +2 -1
  234. package/dist/esm/impl/doge/doge.d.ts.map +1 -1
  235. package/dist/esm/impl/doge/doge.js +1 -1
  236. package/dist/esm/impl/ltc/ltc.d.ts +0 -1
  237. package/dist/esm/impl/ltc/ltc.d.ts.map +1 -1
  238. package/dist/esm/impl/ltc/ltc.js +3 -8
  239. package/dist/esm/impl/ltc/tltc.d.ts +0 -1
  240. package/dist/esm/impl/ltc/tltc.d.ts.map +1 -1
  241. package/dist/esm/impl/ltc/tltc.js +3 -7
  242. package/dist/esm/index.d.ts +2 -0
  243. package/dist/esm/index.d.ts.map +1 -1
  244. package/dist/esm/index.js +3 -1
  245. package/dist/esm/keychains.d.ts +5 -0
  246. package/dist/esm/keychains.d.ts.map +1 -1
  247. package/dist/esm/keychains.js +9 -1
  248. package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +2 -2
  249. package/dist/esm/offlineVault/descriptor/transaction.d.ts +3 -2
  250. package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -1
  251. package/dist/esm/offlineVault/descriptor/transaction.js +5 -8
  252. package/dist/esm/recovery/RecoveryProvider.d.ts +1 -3
  253. package/dist/esm/recovery/RecoveryProvider.d.ts.map +1 -1
  254. package/dist/esm/recovery/RecoveryProvider.js +1 -1
  255. package/dist/esm/recovery/backupKeyRecovery.d.ts +73 -4
  256. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
  257. package/dist/esm/recovery/backupKeyRecovery.js +165 -100
  258. package/dist/esm/recovery/crossChainRecovery.d.ts +5 -5
  259. package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
  260. package/dist/esm/recovery/crossChainRecovery.js +24 -90
  261. package/dist/esm/recovery/psbt.d.ts +8 -31
  262. package/dist/esm/recovery/psbt.d.ts.map +1 -1
  263. package/dist/esm/recovery/psbt.js +14 -91
  264. package/dist/esm/transaction/descriptor/explainPsbt.d.ts +3 -3
  265. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  266. package/dist/esm/transaction/descriptor/explainPsbt.js +14 -18
  267. package/dist/esm/transaction/descriptor/index.d.ts +1 -1
  268. package/dist/esm/transaction/descriptor/index.d.ts.map +1 -1
  269. package/dist/esm/transaction/descriptor/index.js +1 -1
  270. package/dist/esm/transaction/descriptor/parse.d.ts +6 -4
  271. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
  272. package/dist/esm/transaction/descriptor/parse.js +22 -15
  273. package/dist/esm/transaction/descriptor/signPsbt.d.ts +6 -7
  274. package/dist/esm/transaction/descriptor/signPsbt.d.ts.map +1 -1
  275. package/dist/esm/transaction/descriptor/signPsbt.js +19 -18
  276. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +4 -4
  277. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  278. package/dist/esm/transaction/descriptor/verifyTransaction.js +10 -5
  279. package/dist/esm/transaction/explainTransaction.d.ts +2 -1
  280. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
  281. package/dist/esm/transaction/explainTransaction.js +3 -2
  282. package/dist/esm/transaction/fixedScript/SigningError.d.ts +5 -3
  283. package/dist/esm/transaction/fixedScript/SigningError.d.ts.map +1 -1
  284. package/dist/esm/transaction/fixedScript/SigningError.js +8 -1
  285. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +2 -1
  286. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  287. package/dist/esm/transaction/fixedScript/explainTransaction.js +1 -8
  288. package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -1
  289. package/dist/esm/transaction/fixedScript/parseOutput.js +8 -12
  290. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +2 -2
  291. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  292. package/dist/esm/transaction/fixedScript/parseTransaction.js +36 -11
  293. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +2 -2
  294. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
  295. package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +4 -2
  296. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts +1 -1
  297. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -1
  298. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.js +1 -1
  299. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +3 -2
  300. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  301. package/dist/esm/transaction/fixedScript/signPsbtWasm.js +14 -24
  302. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +6 -5
  303. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  304. package/dist/esm/transaction/fixedScript/signTransaction.js +10 -8
  305. package/dist/esm/transaction/outputDifference.d.ts +5 -1
  306. package/dist/esm/transaction/outputDifference.d.ts.map +1 -1
  307. package/dist/esm/transaction/outputDifference.js +5 -2
  308. package/dist/esm/transaction/recipient.d.ts +5 -0
  309. package/dist/esm/transaction/recipient.d.ts.map +1 -1
  310. package/dist/esm/transaction/recipient.js +13 -1
  311. package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
  312. package/dist/esm/transaction/signTransaction.js +10 -10
  313. package/dist/esm/unspent.d.ts +55 -0
  314. package/dist/esm/unspent.d.ts.map +1 -0
  315. package/dist/esm/unspent.js +8 -0
  316. package/dist/esm/wasmUtil.d.ts +29 -0
  317. package/dist/esm/wasmUtil.d.ts.map +1 -0
  318. package/dist/esm/wasmUtil.js +47 -0
  319. package/package.json +13 -14
  320. package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts +0 -2
  321. package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts.map +0 -1
  322. package/dist/cjs/test/unit/impl/btc/unit/btc.js +0 -220
  323. package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts +0 -4
  324. package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts.map +0 -1
  325. package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.js +0 -10
  326. package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts +0 -2
  327. package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts.map +0 -1
  328. package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.js +0 -18
  329. package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts +0 -2
  330. package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts.map +0 -1
  331. package/dist/cjs/test/unit/impl/ltc/unit/index.js +0 -39
  332. package/dist/cjs/test/unit/transaction/descriptor/outputDifference.d.ts.map +0 -1
  333. package/dist/cjs/test/unit/transaction/descriptor/outputDifference.js +0 -76
  334. /package/dist/cjs/test/unit/transaction/{descriptor/outputDifference.d.ts → outputDifference.d.ts} +0 -0
@@ -32,20 +32,40 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
35
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.assertEqualParsedPsbt = assertEqualParsedPsbt;
36
40
  exports.transactionToObj = transactionToObj;
37
41
  exports.transactionHexToObj = transactionHexToObj;
38
42
  exports.createPrebuildTransaction = createPrebuildTransaction;
39
43
  exports.createHalfSignedTransaction = createHalfSignedTransaction;
40
44
  exports.createFullSignedTransaction = createFullSignedTransaction;
45
+ const assert_1 = __importDefault(require("assert"));
41
46
  const utxolib = __importStar(require("@bitgo/utxo-lib"));
47
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
48
+ const names_1 = require("../../../src/names");
42
49
  const { isWalletUnspent, signInputWithUnspent } = utxolib.bitgo;
43
50
  function toTxOutput(u, network) {
44
51
  return {
45
- script: utxolib.address.toOutputScript(u.address, network),
52
+ script: Buffer.from(wasm_utxo_1.address.toOutputScriptWithCoin(u.address, (0, names_1.getCoinName)(network))),
46
53
  value: u.value,
47
54
  };
48
55
  }
56
+ function assertEqualParsedPsbt(a, b, coinName, walletKeys, replayProtection) {
57
+ if (!(0, wasm_utxo_1.hasPsbtMagic)(a)) {
58
+ throw new Error('a is not a psbt');
59
+ }
60
+ if (!(0, wasm_utxo_1.hasPsbtMagic)(b)) {
61
+ throw new Error('b is not a psbt');
62
+ }
63
+ const aPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(a, coinName);
64
+ const bPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(b, coinName);
65
+ const aParsed = aPsbt.parseTransactionWithWalletKeys(walletKeys, { publicKeys: replayProtection });
66
+ const bParsed = bPsbt.parseTransactionWithWalletKeys(walletKeys, { publicKeys: replayProtection });
67
+ assert_1.default.deepStrictEqual(aParsed, bParsed);
68
+ }
49
69
  function transactionToObj(tx) {
50
70
  return {
51
71
  id: tx.getId(),
@@ -104,4 +124,4 @@ function createFullSignedTransaction(network, unspents, outputAddress, signer, h
104
124
  }
105
125
  return createTransactionBuilderWithSignedInputs(network, unspents, new utxolib.bitgo.WalletUnspentSigner(signer.walletKeys, signer.cosigner, signer.signer), halfSigned).build();
106
126
  }
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdXRpbC90cmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCQSw0Q0FpQkM7QUFFRCxrREFZQztBQUVELDhEQWlCQztBQW9CRCxrRUFXQztBQUVELGtFQWdCQztBQWhJRCx5REFBMkM7QUFDM0MsTUFBTSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFrQmhFLFNBQVMsVUFBVSxDQUNqQixDQUFtQixFQUNuQixPQUF3QjtJQUV4QixPQUFPO1FBQ0wsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQzFELEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztLQUNmLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQzlCLEVBQTBDO0lBRTFDLE9BQU87UUFDTCxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRTtRQUNkLEdBQUcsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUNsQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDbkQsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO1lBQ2QsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQyxD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eEYsVUFBVSxDQUNYLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuY29uc3QgeyBpc1dhbGxldFVuc3BlbnQsIHNpZ25JbnB1dFdpdGhVbnNwZW50IH0gPSB1dHhvbGliLmJpdGdvO1xudHlwZSBSb290V2FsbGV0S2V5cyA9IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXM7XG50eXBlIFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSB1dHhvbGliLmJpdGdvLlVuc3BlbnQ8VE51bWJlcj47XG5leHBvcnQgdHlwZSBUcmFuc2FjdGlvbk9iaiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaGV4OiBzdHJpbmc7XG4gIGluczoge1xuICAgIHR4aWQ6IHN0cmluZztcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHNjcmlwdFNpZz86IHN0cmluZztcbiAgICB3aXRuZXNzPzogc3RyaW5nW107XG4gIH1bXTtcbiAgb3V0czoge1xuICAgIHNjcmlwdDogc3RyaW5nO1xuICAgIHZhbHVlOiBudW1iZXIgfCBzdHJpbmc7XG4gIH1bXTtcbn07XG5cbmZ1bmN0aW9uIHRvVHhPdXRwdXQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIHU6IFVuc3BlbnQ8VE51bWJlcj4sXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogdXR4b2xpYi5UeE91dHB1dDxUTnVtYmVyPiB7XG4gIHJldHVybiB7XG4gICAgc2NyaXB0OiB1dHhvbGliLmFkZHJlc3MudG9PdXRwdXRTY3JpcHQodS5hZGRyZXNzLCBuZXR3b3JrKSxcbiAgICB2YWx1ZTogdS52YWx1ZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zYWN0aW9uVG9PYmo8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIHR4OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogVHJhbnNhY3Rpb25PYmoge1xuICByZXR1cm4ge1xuICAgIGlkOiB0eC5nZXRJZCgpLFxuICAgIGhleDogdHgudG9CdWZmZXIoKS50b1N0cmluZygnaGV4JyksXG4gICAgaW5zOiB0eC5pbnMubWFwKCh2KSA9PiAoe1xuICAgICAgdHhpZDogQnVmZmVyLmZyb20odi5oYXNoKS5yZXZlcnNlKCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgaW5kZXg6IHYuaW5kZXgsXG4gICAgICBzY3JpcHQ6IHYuc2NyaXB0Py50b1N0cmluZygnaGV4JyksXG4gICAgICB3aXRuZXNzOiB2LndpdG5lc3M/Lm1hcCgodikgPT4gdi50b1N0cmluZygnaGV4JykpLFxuICAgIH0pKSxcbiAgICBvdXRzOiB0eC5vdXRzLm1hcCgodikgPT4gKHtcbiAgICAgIHNjcmlwdDogdi5zY3JpcHQudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgdmFsdWU6IHR5cGVvZiB2LnZhbHVlID09PSAnYmlnaW50JyA/IHYudmFsdWUudG9TdHJpbmcoKSA6ICh2LnZhbHVlIGFzIG51bWJlciksXG4gICAgfSkpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNhY3Rpb25IZXhUb09iaihcbiAgdHhIZXg6IHN0cmluZyxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcidcbik6IFRyYW5zYWN0aW9uT2JqIHtcbiAgY29uc3Qgb2JqID0gdHJhbnNhY3Rpb25Ub09iaihcbiAgICB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcihCdWZmZXIuZnJvbSh0eEhleCwgJ2hleCcpLCBuZXR3b3JrLCB7IGFtb3VudFR5cGUgfSlcbiAgKTtcbiAgaWYgKG9iai5oZXggIT09IHR4SGV4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzZXJpYWxpemVkIHR4SGV4IGRvZXMgbm90IG1hdGNoIGlucHV0YCk7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByZWJ1aWxkVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgb3V0cHV0QWRkcmVzczogc3RyaW5nXG4pOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gIGNvbnN0IHR4YiA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyRm9yTmV0d29yazxUTnVtYmVyPihuZXR3b3JrKTtcbiAgdW5zcGVudHMuZm9yRWFjaCgodSkgPT4ge1xuICAgIGNvbnN0IFt0eGlkLCB2aW5dID0gdS5pZC5zcGxpdCgnOicpO1xuICAgIHR4Yi5hZGRJbnB1dCh0eGlkLCBOdW1iZXIodmluKSk7XG4gIH0pO1xuICBjb25zdCBhbW91bnRUeXBlID0gdW5zcGVudHMubGVuZ3RoID4gMCAmJiB0eXBlb2YgdW5zcGVudHNbMF0udmFsdWUgPT09ICdiaWdpbnQnID8gJ2JpZ2ludCcgOiAnbnVtYmVyJztcbiAgaWYgKGFtb3VudFR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgdW5zcGVudHMuZm9yRWFjaCgodSkgPT4gKHUudmFsdWUgPSBNYXRoLnJvdW5kKHUudmFsdWUgYXMgbnVtYmVyKSBhcyBUTnVtYmVyKSk7XG4gIH1cbiAgY29uc3QgdW5zcGVudFN1bSA9IHV0eG9saWIuYml0Z28udW5zcGVudFN1bTxUTnVtYmVyPih1bnNwZW50cywgYW1vdW50VHlwZSk7XG4gIHR4Yi5hZGRPdXRwdXQob3V0cHV0QWRkcmVzcywgdXR4b2xpYi5iaXRnby50b1ROdW1iZXI8VE51bWJlcj4oQmlnSW50KHVuc3BlbnRTdW0pIC0gQmlnSW50KDEwMDApLCBhbW91bnRUeXBlKSk7XG4gIHJldHVybiB0eGIuYnVpbGRJbmNvbXBsZXRlKCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zYWN0aW9uQnVpbGRlcldpdGhTaWduZWRJbnB1dHM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgc2lnbmVyOiB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnRTaWduZXI8Um9vdFdhbGxldEtleXM+LFxuICBpbnB1dFRyYW5zYWN0aW9uOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXI+IHtcbiAgY29uc3QgdHhCdWlsZGVyID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJGcm9tVHJhbnNhY3Rpb248VE51bWJlcj4oXG4gICAgaW5wdXRUcmFuc2FjdGlvbixcbiAgICB1bnNwZW50cy5tYXAoKHUpID0+IHRvVHhPdXRwdXQ8VE51bWJlcj4odSwgbmV0d29yaykpXG4gICk7XG4gIHVuc3BlbnRzLmZvckVhY2goKHUsIGlucHV0SW5kZXgpID0+IHtcbiAgICBpZiAoaXNXYWxsZXRVbnNwZW50PFROdW1iZXI+KHUpKSB7XG4gICAgICBzaWduSW5wdXRXaXRoVW5zcGVudDxUTnVtYmVyPih0eEJ1aWxkZXIsIGlucHV0SW5kZXgsIHUsIHNpZ25lcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHR4QnVpbGRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhhbGZTaWduZWRUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICB1bnNwZW50czogVW5zcGVudDxUTnVtYmVyPltdLFxuICBvdXRwdXRBZGRyZXNzOiBzdHJpbmcsXG4gIHNpZ25lcjogdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50U2lnbmVyPFJvb3RXYWxsZXRLZXlzPixcbiAgcHJlYnVpbGQ/OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICBpZiAoIXByZWJ1aWxkKSB7XG4gICAgcHJlYnVpbGQgPSBjcmVhdGVQcmVidWlsZFRyYW5zYWN0aW9uPFROdW1iZXI+KG5ldHdvcmssIHVuc3BlbnRzLCBvdXRwdXRBZGRyZXNzKTtcbiAgfVxuICByZXR1cm4gY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyV2l0aFNpZ25lZElucHV0czxUTnVtYmVyPihuZXR3b3JrLCB1bnNwZW50cywgc2lnbmVyLCBwcmVidWlsZCkuYnVpbGRJbmNvbXBsZXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGdWxsU2lnbmVkVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgb3V0cHV0QWRkcmVzczogc3RyaW5nLFxuICBzaWduZXI6IHV0eG9saWIuYml0Z28uV2FsbGV0VW5zcGVudFNpZ25lcjxSb290V2FsbGV0S2V5cz4sXG4gIGhhbGZTaWduZWQ/OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICBpZiAoIWhhbGZTaWduZWQpIHtcbiAgICBoYWxmU2lnbmVkID0gY3JlYXRlSGFsZlNpZ25lZFRyYW5zYWN0aW9uPFROdW1iZXI+KG5ldHdvcmssIHVuc3BlbnRzLCBvdXRwdXRBZGRyZXNzLCBzaWduZXIpO1xuICB9XG4gIHJldHVybiBjcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJXaXRoU2lnbmVkSW5wdXRzPFROdW1iZXI+KFxuICAgIG5ldHdvcmssXG4gICAgdW5zcGVudHMsXG4gICAgbmV3IHV0eG9saWIuYml0Z28uV2FsbGV0VW5zcGVudFNpZ25lcihzaWduZXIud2FsbGV0S2V5cywgc2lnbmVyLmNvc2lnbmVyLCBzaWduZXIuc2lnbmVyKSxcbiAgICBoYWxmU2lnbmVkXG4gICkuYnVpbGQoKTtcbn1cbiJdfQ==
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdXRpbC90cmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1DQSxzREFrQkM7QUFFRCw0Q0FpQkM7QUFFRCxrREFZQztBQUVELDhEQWlCQztBQW9CRCxrRUFXQztBQUVELGtFQWdCQztBQTFKRCxvREFBNEI7QUFFNUIseURBQTJDO0FBQzNDLGdEQUFtRztBQUVuRyw4Q0FBK0Q7QUFFL0QsTUFBTSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFrQmhFLFNBQVMsVUFBVSxDQUNqQixDQUFtQixFQUNuQixPQUF3QjtJQUV4QixPQUFPO1FBQ0wsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUEsbUJBQVcsRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztLQUNmLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IscUJBQXFCLENBQ25DLENBQVMsRUFDVCxDQUFTLEVBQ1QsUUFBc0IsRUFDdEIsVUFBOEIsRUFDOUIsZ0JBQTBCO0lBRTFCLElBQUksQ0FBQyxJQUFBLHdCQUFZLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELElBQUksQ0FBQyxJQUFBLHdCQUFZLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLDZCQUFpQixDQUFDLFNBQVMs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UUFDakMsSUFBSSxlQUFlLENBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxvQkFBb0IsQ0FBVSxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQTJCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUYsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQWdCLDJCQUEyQixDQUN6QyxPQUF3QixFQUN4QixRQUE0QixFQUM1QixhQUFxQixFQUNyQixNQUFnRSxFQUNoRSxRQUFpRDtJQUVqRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxRQUFRLEdBQUcseUJBQXlCLENBQVUsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBQ0QsT0FBTyx3Q0FBd0MsQ0FBVSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUNsSCxDQUFDO0FBRUQsU0FBZ0IsMkJBQTJCLENBQ3pDLE9BQXdCLEVBQ3hCLFFBQTRCLEVBQzVCLGFBQXFCLEVBQ3JCLE1BQWdFLEVBQ2hFLFVBQW1EO0lBRW5ELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixVQUFVLEdBQUcsMkJBQTJCLENBQVUsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUNELE9BQU8sd0NBQXdDLENBQzdDLE9BQU8sRUFDUCxRQUFRLEVBQ1IsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3hGLFVBQVUsQ0FDWCxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgRUNQYWlyLCBmaXhlZFNjcmlwdFdhbGxldCwgaGFzUHNidE1hZ2ljLCBhZGRyZXNzIGFzIHdhc21BZGRyZXNzIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IGdldENvaW5OYW1lLCBVdHhvQ29pbk5hbWUgfSBmcm9tICcuLi8uLi8uLi9zcmMvbmFtZXMnO1xuaW1wb3J0IHR5cGUgeyBVbnNwZW50LCBXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi4vLi4vLi4vc3JjL3Vuc3BlbnQnO1xuY29uc3QgeyBpc1dhbGxldFVuc3BlbnQsIHNpZ25JbnB1dFdpdGhVbnNwZW50IH0gPSB1dHhvbGliLmJpdGdvO1xudHlwZSBVdHhvbGliUm9vdFdhbGxldEtleXMgPSB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzO1xudHlwZSBXYXNtUm9vdFdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cztcbmV4cG9ydCB0eXBlIFRyYW5zYWN0aW9uT2JqID0ge1xuICBpZDogc3RyaW5nO1xuICBoZXg6IHN0cmluZztcbiAgaW5zOiB7XG4gICAgdHhpZDogc3RyaW5nO1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgc2NyaXB0U2lnPzogc3RyaW5nO1xuICAgIHdpdG5lc3M/OiBzdHJpbmdbXTtcbiAgfVtdO1xuICBvdXRzOiB7XG4gICAgc2NyaXB0OiBzdHJpbmc7XG4gICAgdmFsdWU6IG51bWJlciB8IHN0cmluZztcbiAgfVtdO1xufTtcblxuZnVuY3Rpb24gdG9UeE91dHB1dDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgdTogVW5zcGVudDxUTnVtYmVyPixcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiB1dHhvbGliLlR4T3V0cHV0PFROdW1iZXI+IHtcbiAgcmV0dXJuIHtcbiAgICBzY3JpcHQ6IEJ1ZmZlci5mcm9tKHdhc21BZGRyZXNzLnRvT3V0cHV0U2NyaXB0V2l0aENvaW4odS5hZGRyZXNzLCBnZXRDb2luTmFtZShuZXR3b3JrKSkpLFxuICAgIHZhbHVlOiB1LnZhbHVlLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0RXF1YWxQYXJzZWRQc2J0KFxuICBhOiBCdWZmZXIsXG4gIGI6IEJ1ZmZlcixcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZSxcbiAgd2FsbGV0S2V5czogV2FzbVJvb3RXYWxsZXRLZXlzLFxuICByZXBsYXlQcm90ZWN0aW9uOiBFQ1BhaXJbXVxuKTogdm9pZCB7XG4gIGlmICghaGFzUHNidE1hZ2ljKGEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdhIGlzIG5vdCBhIHBzYnQnKTtcbiAgfVxuICBpZiAoIWhhc1BzYnRNYWdpYyhiKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignYiBpcyBub3QgYSBwc2J0Jyk7XG4gIH1cbiAgY29uc3QgYVBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKGEsIGNvaW5OYW1lKTtcbiAgY29uc3QgYlBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKGIsIGNvaW5OYW1lKTtcbiAgY29uc3QgYVBhcnNlZCA9IGFQc2J0LnBhcnNlVHJhbnNhY3Rpb25XaXRoV2FsbGV0S2V5cyh3YWxsZXRLZXlzLCB7IHB1YmxpY0tleXM6IHJlcGxheVByb3RlY3Rpb24gfSk7XG4gIGNvbnN0IGJQYXJzZWQgPSBiUHNidC5wYXJzZVRyYW5zYWN0aW9uV2l0aFdhbGxldEtleXMod2FsbGV0S2V5cywgeyBwdWJsaWNLZXlzOiByZXBsYXlQcm90ZWN0aW9uIH0pO1xuICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGFQYXJzZWQsIGJQYXJzZWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNhY3Rpb25Ub09iajxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgdHg6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+XG4pOiBUcmFuc2FjdGlvbk9iaiB7XG4gIHJldHVybiB7XG4gICAgaWQ6IHR4LmdldElkKCksXG4gICAgaGV4OiB0eC50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICBpbnM6IHR4Lmlucy5tYXAoKHYpID0+ICh7XG4gICAgICB0eGlkOiBCdWZmZXIuZnJvbSh2Lmhhc2gpLnJldmVyc2UoKS50b1N0cmluZygnaGV4JyksXG4gICAgICBpbmRleDogdi5pbmRleCxcbiAgICAgIHNjcmlwdDogdi5zY3JpcHQ/LnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHdpdG5lc3M6IHYud2l0bmVzcz8ubWFwKCh2KSA9PiB2LnRvU3RyaW5nKCdoZXgnKSksXG4gICAgfSkpLFxuICAgIG91dHM6IHR4Lm91dHMubWFwKCh2KSA9PiAoe1xuICAgICAgc2NyaXB0OiB2LnNjcmlwdC50b1N0cmluZygnaGV4JyksXG4gICAgICB2YWx1ZTogdHlwZW9mIHYudmFsdWUgPT09ICdiaWdpbnQnID8gdi52YWx1ZS50b1N0cmluZygpIDogKHYudmFsdWUgYXMgbnVtYmVyKSxcbiAgICB9KSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2FjdGlvbkhleFRvT2JqKFxuICB0eEhleDogc3RyaW5nLFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJ1xuKTogVHJhbnNhY3Rpb25PYmoge1xuICBjb25zdCBvYmogPSB0cmFuc2FjdGlvblRvT2JqKFxuICAgIHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyKEJ1ZmZlci5mcm9tKHR4SGV4LCAnaGV4JyksIG5ldHdvcmssIHsgYW1vdW50VHlwZSB9KVxuICApO1xuICBpZiAob2JqLmhleCAhPT0gdHhIZXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHNlcmlhbGl6ZWQgdHhIZXggZG9lcyBub3QgbWF0Y2ggaW5wdXRgKTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJlYnVpbGRUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICB1bnNwZW50czogVW5zcGVudDxUTnVtYmVyPltdLFxuICBvdXRwdXRBZGRyZXNzOiBzdHJpbmdcbik6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgY29uc3QgdHhiID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJGb3JOZXR3b3JrPFROdW1iZXI+KG5ldHdvcmspO1xuICB1bnNwZW50cy5mb3JFYWNoKCh1KSA9PiB7XG4gICAgY29uc3QgW3R4aWQsIHZpbl0gPSB1LmlkLnNwbGl0KCc6Jyk7XG4gICAgdHhiLmFkZElucHV0KHR4aWQsIE51bWJlcih2aW4pKTtcbiAgfSk7XG4gIGNvbnN0IGFtb3VudFR5cGUgPSB1bnNwZW50cy5sZW5ndGggPiAwICYmIHR5cGVvZiB1bnNwZW50c1swXS52YWx1ZSA9PT0gJ2JpZ2ludCcgPyAnYmlnaW50JyA6ICdudW1iZXInO1xuICBpZiAoYW1vdW50VHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICB1bnNwZW50cy5mb3JFYWNoKCh1KSA9PiAodS52YWx1ZSA9IE1hdGgucm91bmQodS52YWx1ZSBhcyBudW1iZXIpIGFzIFROdW1iZXIpKTtcbiAgfVxuICBjb25zdCB1bnNwZW50U3VtID0gdXR4b2xpYi5iaXRnby51bnNwZW50U3VtPFROdW1iZXI+KHVuc3BlbnRzLCBhbW91bnRUeXBlKTtcbiAgdHhiLmFkZE91dHB1dChvdXRwdXRBZGRyZXNzLCB1dHhvbGliLmJpdGdvLnRvVE51bWJlcjxUTnVtYmVyPihCaWdJbnQodW5zcGVudFN1bSkgLSBCaWdJbnQoMTAwMCksIGFtb3VudFR5cGUpKTtcbiAgcmV0dXJuIHR4Yi5idWlsZEluY29tcGxldGUoKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyV2l0aFNpZ25lZElucHV0czxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICB1bnNwZW50czogVW5zcGVudDxUTnVtYmVyPltdLFxuICBzaWduZXI6IHV0eG9saWIuYml0Z28uV2FsbGV0VW5zcGVudFNpZ25lcjxVdHhvbGliUm9vdFdhbGxldEtleXM+LFxuICBpbnB1dFRyYW5zYWN0aW9uOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXI+IHtcbiAgY29uc3QgdHhCdWlsZGVyID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJGcm9tVHJhbnNhY3Rpb248VE51bWJlcj4oXG4gICAgaW5wdXRUcmFuc2FjdGlvbixcbiAgICB1bnNwZW50cy5tYXAoKHUpID0+IHRvVHhPdXRwdXQ8VE51bWJlcj4odSwgbmV0d29yaykpXG4gICk7XG4gIHVuc3BlbnRzLmZvckVhY2goKHUsIGlucHV0SW5kZXgpID0+IHtcbiAgICBpZiAoaXNXYWxsZXRVbnNwZW50PFROdW1iZXI+KHUpKSB7XG4gICAgICBzaWduSW5wdXRXaXRoVW5zcGVudDxUTnVtYmVyPih0eEJ1aWxkZXIsIGlucHV0SW5kZXgsIHUgYXMgV2FsbGV0VW5zcGVudDxUTnVtYmVyPiwgc2lnbmVyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdHhCdWlsZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGFsZlNpZ25lZFRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssXG4gIHVuc3BlbnRzOiBVbnNwZW50PFROdW1iZXI+W10sXG4gIG91dHB1dEFkZHJlc3M6IHN0cmluZyxcbiAgc2lnbmVyOiB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnRTaWduZXI8VXR4b2xpYlJvb3RXYWxsZXRLZXlzPixcbiAgcHJlYnVpbGQ/OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICBpZiAoIXByZWJ1aWxkKSB7XG4gICAgcHJlYnVpbGQgPSBjcmVhdGVQcmVidWlsZFRyYW5zYWN0aW9uPFROdW1iZXI+KG5ldHdvcmssIHVuc3BlbnRzLCBvdXRwdXRBZGRyZXNzKTtcbiAgfVxuICByZXR1cm4gY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyV2l0aFNpZ25lZElucHV0czxUTnVtYmVyPihuZXR3b3JrLCB1bnNwZW50cywgc2lnbmVyLCBwcmVidWlsZCkuYnVpbGRJbmNvbXBsZXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGdWxsU2lnbmVkVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgb3V0cHV0QWRkcmVzczogc3RyaW5nLFxuICBzaWduZXI6IHV0eG9saWIuYml0Z28uV2FsbGV0VW5zcGVudFNpZ25lcjxVdHhvbGliUm9vdFdhbGxldEtleXM+LFxuICBoYWxmU2lnbmVkPzogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj5cbik6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgaWYgKCFoYWxmU2lnbmVkKSB7XG4gICAgaGFsZlNpZ25lZCA9IGNyZWF0ZUhhbGZTaWduZWRUcmFuc2FjdGlvbjxUTnVtYmVyPihuZXR3b3JrLCB1bnNwZW50cywgb3V0cHV0QWRkcmVzcywgc2lnbmVyKTtcbiAgfVxuICByZXR1cm4gY3JlYXRlVHJhbnNhY3Rpb25CdWlsZGVyV2l0aFNpZ25lZElucHV0czxUTnVtYmVyPihcbiAgICBuZXR3b3JrLFxuICAgIHVuc3BlbnRzLFxuICAgIG5ldyB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnRTaWduZXIoc2lnbmVyLndhbGxldEtleXMsIHNpZ25lci5jb3NpZ25lciwgc2lnbmVyLnNpZ25lciksXG4gICAgaGFsZlNpZ25lZFxuICApLmJ1aWxkKCk7XG59XG4iXX0=
@@ -1,13 +1,71 @@
1
1
  import * as utxolib from '@bitgo/utxo-lib';
2
- type RootWalletKeys = utxolib.bitgo.RootWalletKeys;
3
- type Unspent<TNumber extends number | bigint = number> = utxolib.bitgo.Unspent<TNumber>;
4
- type WalletUnspent<TNumber extends number | bigint = number> = utxolib.bitgo.WalletUnspent<TNumber>;
2
+ import * as wasmUtxo from '@bitgo/wasm-utxo';
3
+ import type { Unspent, UnspentWithPrevTx, WalletUnspent } from '../../../src/unspent';
4
+ export type UtxolibRootWalletKeys = utxolib.bitgo.RootWalletKeys;
5
+ export type WasmRootWalletKeys = wasmUtxo.fixedScriptWallet.RootWalletKeys;
6
+ export type RootWalletKeys = UtxolibRootWalletKeys | WasmRootWalletKeys;
5
7
  type ChainCode = utxolib.bitgo.ChainCode;
8
+ /** Accept either a coin name string or a utxolib.Network object */
9
+ export type NetworkArg = string | utxolib.Network;
6
10
  export type InputScriptType = utxolib.bitgo.outputScripts.ScriptType2Of3 | 'replayProtection';
7
- export declare function getOutputScript(walletKeys: RootWalletKeys, chain?: 0 | 1 | 30 | 10 | 11 | 20 | 21 | 31 | 40 | 41, index?: number): utxolib.bitgo.outputScripts.SpendableScript;
8
- export declare function getWalletAddress(network: utxolib.Network, walletKeys: RootWalletKeys, chain?: 0 | 1 | 30 | 10 | 11 | 20 | 21 | 31 | 40 | 41, index?: number): string;
9
- export declare function mockWalletUnspent<TNumber extends number | bigint = number>(network: utxolib.Network, walletKeys: RootWalletKeys, { id, chain, index, value, address }: Partial<WalletUnspent<TNumber>>): WalletUnspent<TNumber>;
10
- export declare function mockUnspentReplayProtection<TNumber extends number | bigint = number>(network: utxolib.Network, value: TNumber): Unspent<TNumber>;
11
- export declare function mockUnspent<TNumber extends number | bigint = number>(network: utxolib.Network, walletKeys: RootWalletKeys, chain: ChainCode | InputScriptType, index: number, value: TNumber): Unspent<TNumber>;
11
+ /**
12
+ * Input definition for toUnspent function
13
+ */
14
+ export type Input = {
15
+ scriptType: utxolib.bitgo.outputScripts.ScriptType2Of3 | 'taprootKeyPathSpend';
16
+ value: bigint;
17
+ };
18
+ export declare function mockWalletUnspent<TNumber extends number | bigint = number>(network: NetworkArg, walletKeys: RootWalletKeys, { id, chain, index, value, address }: Partial<WalletUnspent<TNumber>>): WalletUnspent<TNumber>;
19
+ export declare function mockUnspentReplayProtection<TNumber extends number | bigint = number>(network: NetworkArg, value: TNumber): Unspent<TNumber>;
20
+ export declare function mockUnspent<TNumber extends number | bigint = number>(network: NetworkArg, walletKeys: RootWalletKeys, chain: ChainCode | InputScriptType, index: number, value: TNumber): Unspent<TNumber>;
21
+ /**
22
+ * Create unspent object from input script type, index, network and root wallet keys.
23
+ * Supports both utxolib and wasm-utxo RootWalletKeys.
24
+ */
25
+ export declare function toUnspent(input: Input, index: number, network: NetworkArg, rootWalletKeys: RootWalletKeys): WalletUnspent<bigint>;
26
+ /**
27
+ * Wallet unspent with prevTx - combines WalletUnspent and UnspentWithPrevTx
28
+ */
29
+ export interface WalletUnspentWithPrevTx<TNumber extends number | bigint = number> extends WalletUnspent<TNumber>, UnspentWithPrevTx<TNumber> {
30
+ }
31
+ /**
32
+ * Create a mock wallet unspent using wasm-utxo only (no utxolib dependency).
33
+ * Uses createMockPrevTx to generate a realistic txid for the unspent.
34
+ *
35
+ * This is useful for tests that need a valid unspent but don't require the prevTx buffer.
36
+ *
37
+ * @param address - The wallet address for the unspent
38
+ * @param chain - The derivation chain
39
+ * @param index - The derivation index
40
+ * @param value - The value in satoshis (bigint)
41
+ * @param network - The network to get the output script
42
+ * @returns WalletUnspent with a valid txid from a wasm-utxo generated transaction
43
+ */
44
+ export declare function createWasmWalletUnspent<TNumber extends number | bigint = bigint>(address: string, chain: ChainCode, index: number, value: TNumber, network: NetworkArg): WalletUnspent<TNumber>;
45
+ /**
46
+ * Create a mock previous transaction using wasm-utxo's low-level Psbt class.
47
+ *
48
+ * Creates a valid transaction structure with:
49
+ * - A p2wpkh input (segwit, easy to construct)
50
+ * - Outputs including the target output at the specified vout
51
+ * - Reasonable fee rate (input value slightly higher than output sum)
52
+ *
53
+ * @param vout - The output index where the target output should be placed
54
+ * @param outputScript - The scriptPubKey for the target output
55
+ * @param value - The value in satoshis for the target output
56
+ * @returns Object with prevTx buffer and the transaction's txid
57
+ */
58
+ export declare function createMockPrevTx(vout: number, outputScript: Uint8Array, value: bigint): {
59
+ prevTx: Buffer;
60
+ txid: string;
61
+ };
62
+ /**
63
+ * Create unspent with prevTx using wasm-utxo only (no utxolib dependency).
64
+ * The prevTx is built using wasm-utxo's low-level Psbt class.
65
+ *
66
+ * Key: The unspent id uses the actual txid from the generated prevTx,
67
+ * ensuring the MockRecoveryProvider returns the correct prevTx.
68
+ */
69
+ export declare function toUnspentWithPrevTx(input: Input, index: number, network: NetworkArg, rootWalletKeys: WasmRootWalletKeys): WalletUnspentWithPrevTx<bigint>;
12
70
  export {};
13
71
  //# sourceMappingURL=unspents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"unspents.d.ts","sourceRoot":"","sources":["../../../../../test/unit/util/unspents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAS3C,KAAK,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;AACnD,KAAK,OAAO,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACxF,KAAK,aAAa,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpG,KAAK,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;AAEzC,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc,GAAG,kBAAkB,CAAC;AAI9F,wBAAgB,eAAe,CAC7B,UAAU,EAAE,cAAc,EAC1B,KAAK,gDAAe,EACpB,KAAK,SAAI,GACR,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,CAK7C;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,UAAU,EAAE,cAAc,EAC1B,KAAK,gDAAe,EACpB,KAAK,SAAI,GACR,MAAM,CAKR;AAMD,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EACxE,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,UAAU,EAAE,cAAc,EAC1B,EAAE,EAAE,EAAE,KAAoB,EAAE,KAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GACvF,aAAa,CAAC,OAAO,CAAC,CAyBxB;AAED,wBAAgB,2BAA2B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAClF,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED,wBAAgB,WAAW,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAClE,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,UAAU,EAAE,cAAc,EAC1B,KAAK,EAAE,SAAS,GAAG,eAAe,EAClC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC,CAMlB"}
1
+ {"version":3,"file":"unspents.d.ts","sourceRoot":"","sources":["../../../../../test/unit/util/unspents.ts"],"names":[],"mappings":"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"}
@@ -33,27 +33,30 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.getOutputScript = getOutputScript;
37
- exports.getWalletAddress = getWalletAddress;
38
36
  exports.mockWalletUnspent = mockWalletUnspent;
39
37
  exports.mockUnspentReplayProtection = mockUnspentReplayProtection;
40
38
  exports.mockUnspent = mockUnspent;
39
+ exports.toUnspent = toUnspent;
40
+ exports.createWasmWalletUnspent = createWasmWalletUnspent;
41
+ exports.createMockPrevTx = createMockPrevTx;
42
+ exports.toUnspentWithPrevTx = toUnspentWithPrevTx;
41
43
  const utxolib = __importStar(require("@bitgo/utxo-lib"));
42
44
  const sdk_test_1 = require("@bitgo/sdk-test");
43
45
  const wasmUtxo = __importStar(require("@bitgo/wasm-utxo"));
44
46
  const src_1 = require("../../../src");
45
47
  const names_1 = require("../../../src/names");
46
- const { scriptTypeForChain, chainCodesP2sh, getExternalChainCode, getInternalChainCode } = utxolib.bitgo;
47
- const defaultChain = getExternalChainCode(chainCodesP2sh);
48
- function getOutputScript(walletKeys, chain = defaultChain, index = 0) {
49
- return utxolib.bitgo.outputScripts.createOutputScript2of3(walletKeys.deriveForChainAndIndex(chain, index).publicKeys, scriptTypeForChain(chain));
50
- }
51
- function getWalletAddress(network, walletKeys, chain = defaultChain, index = 0) {
52
- if (utxolib.isTestnet(network)) {
53
- return wasmUtxo.fixedScriptWallet.address(walletKeys, chain, index, network);
48
+ const address_1 = require("./address");
49
+ const { chainCodesP2sh, getExternalChainCode, getInternalChainCode } = utxolib.bitgo;
50
+ function toCoinName(network) {
51
+ if (typeof network === 'string') {
52
+ if (!(0, names_1.isUtxoCoinName)(network)) {
53
+ throw new Error(`not a valid coin name: ${network}`);
54
+ }
55
+ return network;
54
56
  }
55
- return utxolib.address.fromOutputScript(getOutputScript(walletKeys, chain, index).scriptPubKey, network);
57
+ return (0, names_1.getCoinName)(network);
56
58
  }
59
+ const defaultChain = getExternalChainCode(chainCodesP2sh);
57
60
  function mockOutputIdForAddress(address) {
58
61
  return (0, sdk_test_1.getSeed)(address).toString('hex') + ':1';
59
62
  }
@@ -64,7 +67,7 @@ function mockWalletUnspent(network, walletKeys, { id, chain = defaultChain, inde
64
67
  if (chain === undefined) {
65
68
  throw new Error(`unspent chain must be set`);
66
69
  }
67
- const deriveAddress = getWalletAddress(network, walletKeys, chain, index);
70
+ const deriveAddress = (0, address_1.getWalletAddress)(toCoinName(network), walletKeys, chain, index);
68
71
  if (address) {
69
72
  if (address !== deriveAddress) {
70
73
  throw new Error(`derivedAddress mismatch: ${address} derived=${deriveAddress}`);
@@ -85,7 +88,7 @@ function mockWalletUnspent(network, walletKeys, { id, chain = defaultChain, inde
85
88
  };
86
89
  }
87
90
  function mockUnspentReplayProtection(network, value) {
88
- const coinName = (0, names_1.getCoinName)(network);
91
+ const coinName = toCoinName(network);
89
92
  const addresses = (0, src_1.getReplayProtectionAddresses)(coinName);
90
93
  if (addresses.length) {
91
94
  const address = addresses[0];
@@ -95,7 +98,7 @@ function mockUnspentReplayProtection(network, value) {
95
98
  value,
96
99
  };
97
100
  }
98
- throw new Error(`${utxolib.getNetworkName(network)} has no replay protection unspetns`);
101
+ throw new Error(`${coinName} has no replay protection unspents`);
99
102
  }
100
103
  function mockUnspent(network, walletKeys, chain, index, value) {
101
104
  if (chain === 'replayProtection') {
@@ -105,4 +108,116 @@ function mockUnspent(network, walletKeys, chain, index, value) {
105
108
  return mockWalletUnspent(network, walletKeys, { chain: getInternalChainCode(chain), value, index });
106
109
  }
107
110
  }
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zcGVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdXRpbC91bnNwZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSwwQ0FTQztBQUVELDRDQVVDO0FBTUQsOENBNkJDO0FBRUQsa0VBZUM7QUFFRCxrQ0FZQztBQXpHRCx5REFBMkM7QUFDM0MsOENBQTBDO0FBQzFDLDJEQUE2QztBQUU3QyxzQ0FBNEQ7QUFDNUQsOENBQWlEO0FBRWpELE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBU3pHLE1BQU0sWUFBWSxHQUFjLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRXJFLFNBQWdCLGVBQWUsQ0FDN0IsVUFBMEIsRUFDMUIsS0FBSyxHQUFHLFlBQVksRUFDcEIsS0FBSyxHQUFHLENBQUM7SUFFVCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUN2RCxVQUFVLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFDMUQsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQzFCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQzlCLE9BQXdCLEVBQ3hCLFVBQTBCLEVBQzFCLEtBQUssR0FBRyxZQUFZLEVBQ3BCLEtBQUssR0FBRyxDQUFDO0lBRVQsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDL0IsT0FBTyxRQUFRLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQyxP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by91dHhvLWxpYic7XG5pbXBvcnQgeyBnZXRTZWVkIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCAqIGFzIHdhc21VdHhvIGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IGdldENvaW5OYW1lIH0gZnJvbSAnLi4vLi4vLi4vc3JjL25hbWVzJztcblxuY29uc3QgeyBzY3JpcHRUeXBlRm9yQ2hhaW4sIGNoYWluQ29kZXNQMnNoLCBnZXRFeHRlcm5hbENoYWluQ29kZSwgZ2V0SW50ZXJuYWxDaGFpbkNvZGUgfSA9IHV0eG9saWIuYml0Z287XG5cbnR5cGUgUm9vdFdhbGxldEtleXMgPSB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzO1xudHlwZSBVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+ID0gdXR4b2xpYi5iaXRnby5VbnNwZW50PFROdW1iZXI+O1xudHlwZSBXYWxsZXRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+ID0gdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50PFROdW1iZXI+O1xudHlwZSBDaGFpbkNvZGUgPSB1dHhvbGliLmJpdGdvLkNoYWluQ29kZTtcblxuZXhwb3J0IHR5cGUgSW5wdXRTY3JpcHRUeXBlID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzIHwgJ3JlcGxheVByb3RlY3Rpb24nO1xuXG5jb25zdCBkZWZhdWx0Q2hhaW46IENoYWluQ29kZSA9IGdldEV4dGVybmFsQ2hhaW5Db2RlKGNoYWluQ29kZXNQMnNoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE91dHB1dFNjcmlwdChcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIGNoYWluID0gZGVmYXVsdENoYWluLFxuICBpbmRleCA9IDBcbik6IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TcGVuZGFibGVTY3JpcHQge1xuICByZXR1cm4gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gICAgd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KGNoYWluLCBpbmRleCkucHVibGljS2V5cyxcbiAgICBzY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXYWxsZXRBZGRyZXNzKFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssXG4gIHdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbiA9IGRlZmF1bHRDaGFpbixcbiAgaW5kZXggPSAwXG4pOiBzdHJpbmcge1xuICBpZiAodXR4b2xpYi5pc1Rlc3RuZXQobmV0d29yaykpIHtcbiAgICByZXR1cm4gd2FzbVV0eG8uZml4ZWRTY3JpcHRXYWxsZXQuYWRkcmVzcyh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgsIG5ldHdvcmspO1xuICB9XG4gIHJldHVybiB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChnZXRPdXRwdXRTY3JpcHQod2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KS5zY3JpcHRQdWJLZXksIG5ldHdvcmspO1xufVxuXG5mdW5jdGlvbiBtb2NrT3V0cHV0SWRGb3JBZGRyZXNzKGFkZHJlc3M6IHN0cmluZykge1xuICByZXR1cm4gZ2V0U2VlZChhZGRyZXNzKS50b1N0cmluZygnaGV4JykgKyAnOjEnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1dhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHsgaWQsIGNoYWluID0gZGVmYXVsdENoYWluLCBpbmRleCA9IDAsIHZhbHVlLCBhZGRyZXNzIH06IFBhcnRpYWw8V2FsbGV0VW5zcGVudDxUTnVtYmVyPj5cbik6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj4ge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5zcGVudCB2YWx1ZSBtdXN0IGJlIHNldGApO1xuICB9XG4gIGlmIChjaGFpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bnNwZW50IGNoYWluIG11c3QgYmUgc2V0YCk7XG4gIH1cbiAgY29uc3QgZGVyaXZlQWRkcmVzcyA9IGdldFdhbGxldEFkZHJlc3MobmV0d29yaywgd2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcbiAgaWYgKGFkZHJlc3MpIHtcbiAgICBpZiAoYWRkcmVzcyAhPT0gZGVyaXZlQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBkZXJpdmVkQWRkcmVzcyBtaXNtYXRjaDogJHthZGRyZXNzfSBkZXJpdmVkPSR7ZGVyaXZlQWRkcmVzc31gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYWRkcmVzcyA9IGRlcml2ZUFkZHJlc3M7XG4gIH1cbiAgaWYgKCFpZCkge1xuICAgIGlkID0gbW9ja091dHB1dElkRm9yQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIGFkZHJlc3MsXG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVW5zcGVudFJlcGxheVByb3RlY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgdmFsdWU6IFROdW1iZXJcbik6IFVuc3BlbnQ8VE51bWJlcj4ge1xuICBjb25zdCBjb2luTmFtZSA9IGdldENvaW5OYW1lKG5ldHdvcmspO1xuICBjb25zdCBhZGRyZXNzZXMgPSBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzKGNvaW5OYW1lKTtcbiAgaWYgKGFkZHJlc3Nlcy5sZW5ndGgpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gYWRkcmVzc2VzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogbW9ja091dHB1dElkRm9yQWRkcmVzcyhhZGRyZXNzKSxcbiAgICAgIGFkZHJlc3MsXG4gICAgICB2YWx1ZSxcbiAgICB9O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgJHt1dHhvbGliLmdldE5ldHdvcmtOYW1lKG5ldHdvcmspfSBoYXMgbm8gcmVwbGF5IHByb3RlY3Rpb24gdW5zcGV0bnNgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssXG4gIHdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogQ2hhaW5Db2RlIHwgSW5wdXRTY3JpcHRUeXBlLFxuICBpbmRleDogbnVtYmVyLFxuICB2YWx1ZTogVE51bWJlclxuKTogVW5zcGVudDxUTnVtYmVyPiB7XG4gIGlmIChjaGFpbiA9PT0gJ3JlcGxheVByb3RlY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1vY2tVbnNwZW50UmVwbGF5UHJvdGVjdGlvbihuZXR3b3JrLCAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JyA/IEJpZ0ludCgxMDAwKSA6IDEwMDApIGFzIFROdW1iZXIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBtb2NrV2FsbGV0VW5zcGVudChuZXR3b3JrLCB3YWxsZXRLZXlzLCB7IGNoYWluOiBnZXRJbnRlcm5hbENoYWluQ29kZShjaGFpbiksIHZhbHVlLCBpbmRleCB9KTtcbiAgfVxufVxuIl19
111
+ /**
112
+ * Create unspent object from input script type, index, network and root wallet keys.
113
+ * Supports both utxolib and wasm-utxo RootWalletKeys.
114
+ */
115
+ function toUnspent(input, index, network, rootWalletKeys) {
116
+ const scriptType = input.scriptType === 'taprootKeyPathSpend' ? 'p2trMusig2' : input.scriptType;
117
+ const chain = getInternalChainCode(scriptType);
118
+ return mockWalletUnspent(network, rootWalletKeys, {
119
+ chain,
120
+ index,
121
+ value: input.value,
122
+ });
123
+ }
124
+ /**
125
+ * Create a mock wallet unspent using wasm-utxo only (no utxolib dependency).
126
+ * Uses createMockPrevTx to generate a realistic txid for the unspent.
127
+ *
128
+ * This is useful for tests that need a valid unspent but don't require the prevTx buffer.
129
+ *
130
+ * @param address - The wallet address for the unspent
131
+ * @param chain - The derivation chain
132
+ * @param index - The derivation index
133
+ * @param value - The value in satoshis (bigint)
134
+ * @param network - The network to get the output script
135
+ * @returns WalletUnspent with a valid txid from a wasm-utxo generated transaction
136
+ */
137
+ function createWasmWalletUnspent(address, chain, index, value, network) {
138
+ // Get output script from address using correct wasm-utxo function
139
+ const outputScript = wasmUtxo.address.toOutputScriptWithCoin(address, toCoinName(network));
140
+ // Create a mock transaction with output at vout=0
141
+ const { txid } = createMockPrevTx(0, outputScript, BigInt(value));
142
+ return {
143
+ id: `${txid}:0`,
144
+ address,
145
+ chain,
146
+ index,
147
+ value,
148
+ };
149
+ }
150
+ /**
151
+ * Create a mock previous transaction using wasm-utxo's low-level Psbt class.
152
+ *
153
+ * Creates a valid transaction structure with:
154
+ * - A p2wpkh input (segwit, easy to construct)
155
+ * - Outputs including the target output at the specified vout
156
+ * - Reasonable fee rate (input value slightly higher than output sum)
157
+ *
158
+ * @param vout - The output index where the target output should be placed
159
+ * @param outputScript - The scriptPubKey for the target output
160
+ * @param value - The value in satoshis for the target output
161
+ * @returns Object with prevTx buffer and the transaction's txid
162
+ */
163
+ function createMockPrevTx(vout, outputScript, value) {
164
+ // Create a p2wpkh script for the dummy input
165
+ // p2wpkh: OP_0 <20-byte-hash> - we use a deterministic hash
166
+ const dummyHash = (0, sdk_test_1.getSeed)('mock-prev-tx-input').subarray(0, 20);
167
+ const p2wpkhScript = new Uint8Array([0x00, 0x14, ...dummyHash]);
168
+ // Calculate total output value
169
+ const dummyOutputValue = BigInt(1000); // 1000 satoshis per dummy output
170
+ const totalOutputValue = dummyOutputValue * BigInt(vout) + value;
171
+ // Input value = output value + small fee (1000 sat - reasonable fee)
172
+ const inputValue = totalOutputValue + BigInt(1000);
173
+ // Create PSBT using WrapPsbt (exported as Psbt)
174
+ const psbt = new wasmUtxo.Psbt(2, 0);
175
+ // Add dummy segwit input - p2wpkh
176
+ psbt.addInput('01'.repeat(32), // non-zero txid to avoid coinbase detection
177
+ 0, inputValue, p2wpkhScript);
178
+ // Add dummy outputs before the target vout
179
+ for (let i = 0; i < vout; i++) {
180
+ psbt.addOutput(p2wpkhScript, dummyOutputValue);
181
+ }
182
+ // Add the target output at the specified vout
183
+ psbt.addOutput(outputScript, value);
184
+ // Get the unsigned transaction bytes
185
+ // Note: This is a valid transaction structure without signatures
186
+ // For prevTx purposes, we just need the output scripts and values
187
+ const txBytes = psbt.getUnsignedTx();
188
+ // Parse with wasm-utxo Transaction to get the txid
189
+ const tx = wasmUtxo.Transaction.fromBytes(txBytes);
190
+ const txid = tx.getId();
191
+ return {
192
+ prevTx: Buffer.from(txBytes),
193
+ txid,
194
+ };
195
+ }
196
+ /**
197
+ * Create unspent with prevTx using wasm-utxo only (no utxolib dependency).
198
+ * The prevTx is built using wasm-utxo's low-level Psbt class.
199
+ *
200
+ * Key: The unspent id uses the actual txid from the generated prevTx,
201
+ * ensuring the MockRecoveryProvider returns the correct prevTx.
202
+ */
203
+ function toUnspentWithPrevTx(input, index, network, rootWalletKeys) {
204
+ const scriptType = input.scriptType === 'taprootKeyPathSpend' ? 'p2trMusig2' : input.scriptType;
205
+ const chain = getInternalChainCode(scriptType);
206
+ const coinName = toCoinName(network);
207
+ // Get the output script for the wallet address
208
+ const outputScript = wasmUtxo.fixedScriptWallet.outputScript(rootWalletKeys, chain, index, coinName);
209
+ // Create mock prevTx with output at vout=0
210
+ const { prevTx, txid } = createMockPrevTx(0, outputScript, input.value);
211
+ // Get the wallet address
212
+ const address = (0, address_1.getWalletAddress)(toCoinName(network), rootWalletKeys, chain, index);
213
+ // Use the actual txid from the prevTx in the unspent id
214
+ return {
215
+ id: `${txid}:0`,
216
+ address,
217
+ chain,
218
+ index,
219
+ value: input.value,
220
+ prevTx,
221
+ };
222
+ }
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zcGVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdXRpbC91bnNwZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThDQSw4Q0E2QkM7QUFFRCxrRUFlQztBQUVELGtDQVlDO0FBTUQsOEJBYUM7QUFzQkQsMERBb0JDO0FBZUQsNENBaURDO0FBU0Qsa0RBNEJDO0FBNVFELHlEQUEyQztBQUMzQyw4Q0FBMEM7QUFDMUMsMkRBQTZDO0FBRTdDLHNDQUE0RDtBQUM1RCw4Q0FBb0Y7QUFHcEYsdUNBQTZDO0FBRTdDLE1BQU0sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBVXJGLFNBQVMsVUFBVSxDQUFDLE9BQW1CO0lBQ3JDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUEsc0JBQWMsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxPQUFPLElBQUEsbUJBQVcsRUFBQyxPQUFPLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBWUQsTUFBTSxZQUFZLEdBQWMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFckUsU0FBUyxzQkFBc0IsQ0FBQyxPQUFlO0lBQzdDLE9BQU8sSUFBQSxrQkFBTyxFQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsQ0FBQztBQUVELFNBQWdCLGlCQUFpQixDQUMvQixPQUFtQixFQUNuQixVQUEwQixFQUMxQixFQUFFLEVBQUUsRUFBRSxLQUFLLEdB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R0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFckMsK0NBQStDO0lBQy9DLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFckcsMkNBQTJDO0lBQzNDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEUseUJBQXlCO0lBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUEsMEJBQWdCLEVBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFcEYsd0RBQXdEO0lBQ3hELE9BQU87UUFDTCxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUk7UUFDZixPQUFPO1FBQ1AsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgZ2V0U2VlZCB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgKiBhcyB3YXNtVXR4byBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvbkFkZHJlc3NlcyB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBnZXRDb2luTmFtZSwgaXNVdHhvQ29pbk5hbWUsIHR5cGUgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vLi4vLi4vc3JjL25hbWVzJztcbmltcG9ydCB0eXBlIHsgVW5zcGVudCwgVW5zcGVudFdpdGhQcmV2VHgsIFdhbGxldFVuc3BlbnQgfSBmcm9tICcuLi8uLi8uLi9zcmMvdW5zcGVudCc7XG5cbmltcG9ydCB7IGdldFdhbGxldEFkZHJlc3MgfSBmcm9tICcuL2FkZHJlc3MnO1xuXG5jb25zdCB7IGNoYWluQ29kZXNQMnNoLCBnZXRFeHRlcm5hbENoYWluQ29kZSwgZ2V0SW50ZXJuYWxDaGFpbkNvZGUgfSA9IHV0eG9saWIuYml0Z287XG5cbmV4cG9ydCB0eXBlIFV0eG9saWJSb290V2FsbGV0S2V5cyA9IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXM7XG5leHBvcnQgdHlwZSBXYXNtUm9vdFdhbGxldEtleXMgPSB3YXNtVXR4by5maXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cztcbmV4cG9ydCB0eXBlIFJvb3RXYWxsZXRLZXlzID0gVXR4b2xpYlJvb3RXYWxsZXRLZXlzIHwgV2FzbVJvb3RXYWxsZXRLZXlzO1xudHlwZSBDaGFpbkNvZGUgPSB1dHhvbGliLmJpdGdvLkNoYWluQ29kZTtcblxuLyoqIEFjY2VwdCBlaXRoZXIgYSBjb2luIG5hbWUgc3RyaW5nIG9yIGEgdXR4b2xpYi5OZXR3b3JrIG9iamVjdCAqL1xuZXhwb3J0IHR5cGUgTmV0d29ya0FyZyA9IHN0cmluZyB8IHV0eG9saWIuTmV0d29yaztcblxuZnVuY3Rpb24gdG9Db2luTmFtZShuZXR3b3JrOiBOZXR3b3JrQXJnKTogVXR4b0NvaW5OYW1lIHtcbiAgaWYgKHR5cGVvZiBuZXR3b3JrID09PSAnc3RyaW5nJykge1xuICAgIGlmICghaXNVdHhvQ29pbk5hbWUobmV0d29yaykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm90IGEgdmFsaWQgY29pbiBuYW1lOiAke25ldHdvcmt9YCk7XG4gICAgfVxuICAgIHJldHVybiBuZXR3b3JrO1xuICB9XG4gIHJldHVybiBnZXRDb2luTmFtZShuZXR3b3JrKTtcbn1cblxuZXhwb3J0IHR5cGUgSW5wdXRTY3JpcHRUeXBlID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzIHwgJ3JlcGxheVByb3RlY3Rpb24nO1xuXG4vKipcbiAqIElucHV0IGRlZmluaXRpb24gZm9yIHRvVW5zcGVudCBmdW5jdGlvblxuICovXG5leHBvcnQgdHlwZSBJbnB1dCA9IHtcbiAgc2NyaXB0VHlwZTogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzIHwgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnO1xuICB2YWx1ZTogYmlnaW50O1xufTtcblxuY29uc3QgZGVmYXVsdENoYWluOiBDaGFpbkNvZGUgPSBnZXRFeHRlcm5hbENoYWluQ29kZShjaGFpbkNvZGVzUDJzaCk7XG5cbmZ1bmN0aW9uIG1vY2tPdXRwdXRJZEZvckFkZHJlc3MoYWRkcmVzczogc3RyaW5nKSB7XG4gIHJldHVybiBnZXRTZWVkKGFkZHJlc3MpLnRvU3RyaW5nKCdoZXgnKSArICc6MSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrV2FsbGV0VW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgbmV0d29yazogTmV0d29ya0FyZyxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHsgaWQsIGNoYWluID0gZGVmYXVsdENoYWluLCBpbmRleCA9IDAsIHZhbHVlLCBhZGRyZXNzIH06IFBhcnRpYWw8V2FsbGV0VW5zcGVudDxUTnVtYmVyPj5cbik6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj4ge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5zcGVudCB2YWx1ZSBtdXN0IGJlIHNldGApO1xuICB9XG4gIGlmIChjaGFpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bnNwZW50IGNoYWluIG11c3QgYmUgc2V0YCk7XG4gIH1cbiAgY29uc3QgZGVyaXZlQWRkcmVzcyA9IGdldFdhbGxldEFkZHJlc3ModG9Db2luTmFtZShuZXR3b3JrKSwgd2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcbiAgaWYgKGFkZHJlc3MpIHtcbiAgICBpZiAoYWRkcmVzcyAhPT0gZGVyaXZlQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBkZXJpdmVkQWRkcmVzcyBtaXNtYXRjaDogJHthZGRyZXNzfSBkZXJpdmVkPSR7ZGVyaXZlQWRkcmVzc31gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYWRkcmVzcyA9IGRlcml2ZUFkZHJlc3M7XG4gIH1cbiAgaWYgKCFpZCkge1xuICAgIGlkID0gbW9ja091dHB1dElkRm9yQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIGFkZHJlc3MsXG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVW5zcGVudFJlcGxheVByb3RlY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IE5ldHdvcmtBcmcsXG4gIHZhbHVlOiBUTnVtYmVyXG4pOiBVbnNwZW50PFROdW1iZXI+IHtcbiAgY29uc3QgY29pbk5hbWUgPSB0b0NvaW5OYW1lKG5ldHdvcmspO1xuICBjb25zdCBhZGRyZXNzZXMgPSBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzKGNvaW5OYW1lKTtcbiAgaWYgKGFkZHJlc3Nlcy5sZW5ndGgpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gYWRkcmVzc2VzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogbW9ja091dHB1dElkRm9yQWRkcmVzcyhhZGRyZXNzKSxcbiAgICAgIGFkZHJlc3MsXG4gICAgICB2YWx1ZSxcbiAgICB9O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgJHtjb2luTmFtZX0gaGFzIG5vIHJlcGxheSBwcm90ZWN0aW9uIHVuc3BlbnRzYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgbmV0d29yazogTmV0d29ya0FyZyxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIGNoYWluOiBDaGFpbkNvZGUgfCBJbnB1dFNjcmlwdFR5cGUsXG4gIGluZGV4OiBudW1iZXIsXG4gIHZhbHVlOiBUTnVtYmVyXG4pOiBVbnNwZW50PFROdW1iZXI+IHtcbiAgaWYgKGNoYWluID09PSAncmVwbGF5UHJvdGVjdGlvbicpIHtcbiAgICByZXR1cm4gbW9ja1Vuc3BlbnRSZXBsYXlQcm90ZWN0aW9uKG5ldHdvcmssICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnID8gQmlnSW50KDEwMDApIDogMTAwMCkgYXMgVE51bWJlcik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1vY2tXYWxsZXRVbnNwZW50KG5ldHdvcmssIHdhbGxldEtleXMsIHsgY2hhaW46IGdldEludGVybmFsQ2hhaW5Db2RlKGNoYWluKSwgdmFsdWUsIGluZGV4IH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIHVuc3BlbnQgb2JqZWN0IGZyb20gaW5wdXQgc2NyaXB0IHR5cGUsIGluZGV4LCBuZXR3b3JrIGFuZCByb290IHdhbGxldCBrZXlzLlxuICogU3VwcG9ydHMgYm90aCB1dHhvbGliIGFuZCB3YXNtLXV0eG8gUm9vdFdhbGxldEtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Vuc3BlbnQoXG4gIGlucHV0OiBJbnB1dCxcbiAgaW5kZXg6IG51bWJlcixcbiAgbmV0d29yazogTmV0d29ya0FyZyxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzXG4pOiBXYWxsZXRVbnNwZW50PGJpZ2ludD4ge1xuICBjb25zdCBzY3JpcHRUeXBlID0gaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnID8gJ3AydHJNdXNpZzInIDogaW5wdXQuc2NyaXB0VHlwZTtcbiAgY29uc3QgY2hhaW4gPSBnZXRJbnRlcm5hbENoYWluQ29kZShzY3JpcHRUeXBlKTtcbiAgcmV0dXJuIG1vY2tXYWxsZXRVbnNwZW50KG5ldHdvcmssIHJvb3RXYWxsZXRLZXlzLCB7XG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWU6IGlucHV0LnZhbHVlLFxuICB9KTtcbn1cblxuLyoqXG4gKiBXYWxsZXQgdW5zcGVudCB3aXRoIHByZXZUeCAtIGNvbWJpbmVzIFdhbGxldFVuc3BlbnQgYW5kIFVuc3BlbnRXaXRoUHJldlR4XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2FsbGV0VW5zcGVudFdpdGhQcmV2VHg8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj5cbiAgZXh0ZW5kcyBXYWxsZXRVbnNwZW50PFROdW1iZXI+LFxuICAgIFVuc3BlbnRXaXRoUHJldlR4PFROdW1iZXI+IHt9XG5cbi8qKlxuICogQ3JlYXRlIGEgbW9jayB3YWxsZXQgdW5zcGVudCB1c2luZyB3YXNtLXV0eG8gb25seSAobm8gdXR4b2xpYiBkZXBlbmRlbmN5KS5cbiAqIFVzZXMgY3JlYXRlTW9ja1ByZXZUeCB0byBnZW5lcmF0ZSBhIHJlYWxpc3RpYyB0eGlkIGZvciB0aGUgdW5zcGVudC5cbiAqXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdHMgdGhhdCBuZWVkIGEgdmFsaWQgdW5zcGVudCBidXQgZG9uJ3QgcmVxdWlyZSB0aGUgcHJldlR4IGJ1ZmZlci5cbiAqXG4gKiBAcGFyYW0gYWRkcmVzcyAtIFRoZSB3YWxsZXQgYWRkcmVzcyBmb3IgdGhlIHVuc3BlbnRcbiAqIEBwYXJhbSBjaGFpbiAtIFRoZSBkZXJpdmF0aW9uIGNoYWluXG4gKiBAcGFyYW0gaW5kZXggLSBUaGUgZGVyaXZhdGlvbiBpbmRleFxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIGluIHNhdG9zaGlzIChiaWdpbnQpXG4gKiBAcGFyYW0gbmV0d29yayAtIFRoZSBuZXR3b3JrIHRvIGdldCB0aGUgb3V0cHV0IHNjcmlwdFxuICogQHJldHVybnMgV2FsbGV0VW5zcGVudCB3aXRoIGEgdmFsaWQgdHhpZCBmcm9tIGEgd2FzbS11dHhvIGdlbmVyYXRlZCB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2FzbVdhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IGJpZ2ludD4oXG4gIGFkZHJlc3M6IHN0cmluZyxcbiAgY2hhaW46IENoYWluQ29kZSxcbiAgaW5kZXg6IG51bWJlcixcbiAgdmFsdWU6IFROdW1iZXIsXG4gIG5ldHdvcms6IE5ldHdvcmtBcmdcbik6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj4ge1xuICAvLyBHZXQgb3V0cHV0IHNjcmlwdCBmcm9tIGFkZHJlc3MgdXNpbmcgY29ycmVjdCB3YXNtLXV0eG8gZnVuY3Rpb25cbiAgY29uc3Qgb3V0cHV0U2NyaXB0ID0gd2FzbVV0eG8uYWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKGFkZHJlc3MsIHRvQ29pbk5hbWUobmV0d29yaykpO1xuXG4gIC8vIENyZWF0ZSBhIG1vY2sgdHJhbnNhY3Rpb24gd2l0aCBvdXRwdXQgYXQgdm91dD0wXG4gIGNvbnN0IHsgdHhpZCB9ID0gY3JlYXRlTW9ja1ByZXZUeCgwLCBvdXRwdXRTY3JpcHQsIEJpZ0ludCh2YWx1ZSkpO1xuXG4gIHJldHVybiB7XG4gICAgaWQ6IGAke3R4aWR9OjBgLFxuICAgIGFkZHJlc3MsXG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWUsXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbW9jayBwcmV2aW91cyB0cmFuc2FjdGlvbiB1c2luZyB3YXNtLXV0eG8ncyBsb3ctbGV2ZWwgUHNidCBjbGFzcy5cbiAqXG4gKiBDcmVhdGVzIGEgdmFsaWQgdHJhbnNhY3Rpb24gc3RydWN0dXJlIHdpdGg6XG4gKiAtIEEgcDJ3cGtoIGlucHV0IChzZWd3aXQsIGVhc3kgdG8gY29uc3RydWN0KVxuICogLSBPdXRwdXRzIGluY2x1ZGluZyB0aGUgdGFyZ2V0IG91dHB1dCBhdCB0aGUgc3BlY2lmaWVkIHZvdXRcbiAqIC0gUmVhc29uYWJsZSBmZWUgcmF0ZSAoaW5wdXQgdmFsdWUgc2xpZ2h0bHkgaGlnaGVyIHRoYW4gb3V0cHV0IHN1bSlcbiAqXG4gKiBAcGFyYW0gdm91dCAtIFRoZSBvdXRwdXQgaW5kZXggd2hlcmUgdGhlIHRhcmdldCBvdXRwdXQgc2hvdWxkIGJlIHBsYWNlZFxuICogQHBhcmFtIG91dHB1dFNjcmlwdCAtIFRoZSBzY3JpcHRQdWJLZXkgZm9yIHRoZSB0YXJnZXQgb3V0cHV0XG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgaW4gc2F0b3NoaXMgZm9yIHRoZSB0YXJnZXQgb3V0cHV0XG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBwcmV2VHggYnVmZmVyIGFuZCB0aGUgdHJhbnNhY3Rpb24ncyB0eGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrUHJldlR4KFxuICB2b3V0OiBudW1iZXIsXG4gIG91dHB1dFNjcmlwdDogVWludDhBcnJheSxcbiAgdmFsdWU6IGJpZ2ludFxuKTogeyBwcmV2VHg6IEJ1ZmZlcjsgdHhpZDogc3RyaW5nIH0ge1xuICAvLyBDcmVhdGUgYSBwMndwa2ggc2NyaXB0IGZvciB0aGUgZHVtbXkgaW5wdXRcbiAgLy8gcDJ3cGtoOiBPUF8wIDwyMC1ieXRlLWhhc2g+IC0gd2UgdXNlIGEgZGV0ZXJtaW5pc3RpYyBoYXNoXG4gIGNvbnN0IGR1bW15SGFzaCA9IGdldFNlZWQoJ21vY2stcHJldi10eC1pbnB1dCcpLnN1YmFycmF5KDAsIDIwKTtcbiAgY29uc3QgcDJ3cGtoU2NyaXB0ID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIDB4MTQsIC4uLmR1bW15SGFzaF0pO1xuXG4gIC8vIENhbGN1bGF0ZSB0b3RhbCBvdXRwdXQgdmFsdWVcbiAgY29uc3QgZHVtbXlPdXRwdXRWYWx1ZSA9IEJpZ0ludCgxMDAwKTsgLy8gMTAwMCBzYXRvc2hpcyBwZXIgZHVtbXkgb3V0cHV0XG4gIGNvbnN0IHRvdGFsT3V0cHV0VmFsdWUgPSBkdW1teU91dHB1dFZhbHVlICogQmlnSW50KHZvdXQpICsgdmFsdWU7XG5cbiAgLy8gSW5wdXQgdmFsdWUgPSBvdXRwdXQgdmFsdWUgKyBzbWFsbCBmZWUgKDEwMDAgc2F0IC0gcmVhc29uYWJsZSBmZWUpXG4gIGNvbnN0IGlucHV0VmFsdWUgPSB0b3RhbE91dHB1dFZhbHVlICsgQmlnSW50KDEwMDApO1xuXG4gIC8vIENyZWF0ZSBQU0JUIHVzaW5nIFdyYXBQc2J0IChleHBvcnRlZCBhcyBQc2J0KVxuICBjb25zdCBwc2J0ID0gbmV3IHdhc21VdHhvLlBzYnQoMiwgMCk7XG5cbiAgLy8gQWRkIGR1bW15IHNlZ3dpdCBpbnB1dCAtIHAyd3BraFxuICBwc2J0LmFkZElucHV0KFxuICAgICcwMScucmVwZWF0KDMyKSwgLy8gbm9uLXplcm8gdHhpZCB0byBhdm9pZCBjb2luYmFzZSBkZXRlY3Rpb25cbiAgICAwLFxuICAgIGlucHV0VmFsdWUsXG4gICAgcDJ3cGtoU2NyaXB0XG4gICk7XG5cbiAgLy8gQWRkIGR1bW15IG91dHB1dHMgYmVmb3JlIHRoZSB0YXJnZXQgdm91dFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZvdXQ7IGkrKykge1xuICAgIHBzYnQuYWRkT3V0cHV0KHAyd3BraFNjcmlwdCwgZHVtbXlPdXRwdXRWYWx1ZSk7XG4gIH1cblxuICAvLyBBZGQgdGhlIHRhcmdldCBvdXRwdXQgYXQgdGhlIHNwZWNpZmllZCB2b3V0XG4gIHBzYnQuYWRkT3V0cHV0KG91dHB1dFNjcmlwdCwgdmFsdWUpO1xuXG4gIC8vIEdldCB0aGUgdW5zaWduZWQgdHJhbnNhY3Rpb24gYnl0ZXNcbiAgLy8gTm90ZTogVGhpcyBpcyBhIHZhbGlkIHRyYW5zYWN0aW9uIHN0cnVjdHVyZSB3aXRob3V0IHNpZ25hdHVyZXNcbiAgLy8gRm9yIHByZXZUeCBwdXJwb3Nlcywgd2UganVzdCBuZWVkIHRoZSBvdXRwdXQgc2NyaXB0cyBhbmQgdmFsdWVzXG4gIGNvbnN0IHR4Qnl0ZXMgPSBwc2J0LmdldFVuc2lnbmVkVHgoKTtcblxuICAvLyBQYXJzZSB3aXRoIHdhc20tdXR4byBUcmFuc2FjdGlvbiB0byBnZXQgdGhlIHR4aWRcbiAgY29uc3QgdHggPSB3YXNtVXR4by5UcmFuc2FjdGlvbi5mcm9tQnl0ZXModHhCeXRlcyk7XG4gIGNvbnN0IHR4aWQgPSB0eC5nZXRJZCgpO1xuXG4gIHJldHVybiB7XG4gICAgcHJldlR4OiBCdWZmZXIuZnJvbSh0eEJ5dGVzKSxcbiAgICB0eGlkLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSB1bnNwZW50IHdpdGggcHJldlR4IHVzaW5nIHdhc20tdXR4byBvbmx5IChubyB1dHhvbGliIGRlcGVuZGVuY3kpLlxuICogVGhlIHByZXZUeCBpcyBidWlsdCB1c2luZyB3YXNtLXV0eG8ncyBsb3ctbGV2ZWwgUHNidCBjbGFzcy5cbiAqXG4gKiBLZXk6IFRoZSB1bnNwZW50IGlkIHVzZXMgdGhlIGFjdHVhbCB0eGlkIGZyb20gdGhlIGdlbmVyYXRlZCBwcmV2VHgsXG4gKiBlbnN1cmluZyB0aGUgTW9ja1JlY292ZXJ5UHJvdmlkZXIgcmV0dXJucyB0aGUgY29ycmVjdCBwcmV2VHguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Vuc3BlbnRXaXRoUHJldlR4KFxuICBpbnB1dDogSW5wdXQsXG4gIGluZGV4OiBudW1iZXIsXG4gIG5ldHdvcms6IE5ldHdvcmtBcmcsXG4gIHJvb3RXYWxsZXRLZXlzOiBXYXNtUm9vdFdhbGxldEtleXNcbik6IFdhbGxldFVuc3BlbnRXaXRoUHJldlR4PGJpZ2ludD4ge1xuICBjb25zdCBzY3JpcHRUeXBlID0gaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnID8gJ3AydHJNdXNpZzInIDogaW5wdXQuc2NyaXB0VHlwZTtcbiAgY29uc3QgY2hhaW4gPSBnZXRJbnRlcm5hbENoYWluQ29kZShzY3JpcHRUeXBlKTtcbiAgY29uc3QgY29pbk5hbWUgPSB0b0NvaW5OYW1lKG5ldHdvcmspO1xuXG4gIC8vIEdldCB0aGUgb3V0cHV0IHNjcmlwdCBmb3IgdGhlIHdhbGxldCBhZGRyZXNzXG4gIGNvbnN0IG91dHB1dFNjcmlwdCA9IHdhc21VdHhvLmZpeGVkU2NyaXB0V2FsbGV0Lm91dHB1dFNjcmlwdChyb290V2FsbGV0S2V5cywgY2hhaW4sIGluZGV4LCBjb2luTmFtZSk7XG5cbiAgLy8gQ3JlYXRlIG1vY2sgcHJldlR4IHdpdGggb3V0cHV0IGF0IHZvdXQ9MFxuICBjb25zdCB7IHByZXZUeCwgdHhpZCB9ID0gY3JlYXRlTW9ja1ByZXZUeCgwLCBvdXRwdXRTY3JpcHQsIGlucHV0LnZhbHVlKTtcblxuICAvLyBHZXQgdGhlIHdhbGxldCBhZGRyZXNzXG4gIGNvbnN0IGFkZHJlc3MgPSBnZXRXYWxsZXRBZGRyZXNzKHRvQ29pbk5hbWUobmV0d29yayksIHJvb3RXYWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gIC8vIFVzZSB0aGUgYWN0dWFsIHR4aWQgZnJvbSB0aGUgcHJldlR4IGluIHRoZSB1bnNwZW50IGlkXG4gIHJldHVybiB7XG4gICAgaWQ6IGAke3R4aWR9OjBgLFxuICAgIGFkZHJlc3MsXG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWU6IGlucHV0LnZhbHVlLFxuICAgIHByZXZUeCxcbiAgfTtcbn1cbiJdfQ==
@@ -3,6 +3,19 @@ import { BitGoAPI } from '@bitgo/sdk-api';
3
3
  import { AbstractUtxoCoin } from '../../../src';
4
4
  export declare const defaultBitGo: import("@bitgo/sdk-test").TestableBG & BitGoAPI;
5
5
  export declare const utxoCoins: AbstractUtxoCoin[];
6
+ /**
7
+ * Minimal subset of coins for comprehensive test coverage.
8
+ * - btc: Full feature set (segwit, taproot, musig2)
9
+ * - bch: replay protection addresses
10
+ * - zec: special transaction format (Overwinter/Sapling)
11
+ */
12
+ export declare const minUtxoCoinNames: readonly ["btc", "bch", "zec"];
13
+ /**
14
+ * Get minimal set of coins for testing. Covers ~99% of feature paths.
15
+ */
16
+ export declare function getMinUtxoCoins(): AbstractUtxoCoin[];
6
17
  export declare function getUtxoCoin(name: string): AbstractUtxoCoin;
7
18
  export declare function getUtxoCoinForNetwork(n: utxolib.Network): AbstractUtxoCoin;
19
+ export type TxFormat = 'legacy' | 'psbt';
20
+ export declare function getScriptTypes(coin: AbstractUtxoCoin, txFormat: TxFormat): utxolib.testutil.InputScriptType[];
8
21
  //# sourceMappingURL=utxoCoins.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utxoCoins.d.ts","sourceRoot":"","sources":["../../../../../test/unit/util/utxoCoins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EACL,gBAAgB,EAqBjB,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,YAAY,iDAAgD,CAAC;AAqC1E,eAAO,MAAM,SAAS,oBAAiB,CAAC;AAExC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAO1D;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,gBAAgB,CAO1E"}
1
+ {"version":3,"file":"utxoCoins.d.ts","sourceRoot":"","sources":["../../../../../test/unit/util/utxoCoins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EACL,gBAAgB,EAsBjB,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,YAAY,iDAAgD,CAAC;AAqC1E,eAAO,MAAM,SAAS,oBAAiB,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,gCAAiC,CAAC;AAE/D;;GAEG;AACH,wBAAgB,eAAe,IAAI,gBAAgB,EAAE,CAEpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAO1D;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,gBAAgB,CAO1E;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzC,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE,CAiB7G"}
@@ -33,9 +33,11 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.utxoCoins = exports.defaultBitGo = void 0;
36
+ exports.minUtxoCoinNames = exports.utxoCoins = exports.defaultBitGo = void 0;
37
+ exports.getMinUtxoCoins = getMinUtxoCoins;
37
38
  exports.getUtxoCoin = getUtxoCoin;
38
39
  exports.getUtxoCoinForNetwork = getUtxoCoinForNetwork;
40
+ exports.getScriptTypes = getScriptTypes;
39
41
  const utxolib = __importStar(require("@bitgo/utxo-lib"));
40
42
  const sdk_api_1 = require("@bitgo/sdk-api");
41
43
  const sdk_test_1 = require("@bitgo/sdk-test");
@@ -76,6 +78,19 @@ function getUtxoCoins(bitgo = exports.defaultBitGo) {
76
78
  .sort((a, b) => utxolib.getNetworkList().indexOf(a.network) - utxolib.getNetworkList().indexOf(b.network));
77
79
  }
78
80
  exports.utxoCoins = getUtxoCoins();
81
+ /**
82
+ * Minimal subset of coins for comprehensive test coverage.
83
+ * - btc: Full feature set (segwit, taproot, musig2)
84
+ * - bch: replay protection addresses
85
+ * - zec: special transaction format (Overwinter/Sapling)
86
+ */
87
+ exports.minUtxoCoinNames = ['btc', 'bch', 'zec'];
88
+ /**
89
+ * Get minimal set of coins for testing. Covers ~99% of feature paths.
90
+ */
91
+ function getMinUtxoCoins() {
92
+ return exports.minUtxoCoinNames.map(getUtxoCoin);
93
+ }
79
94
  function getUtxoCoin(name) {
80
95
  for (const c of exports.utxoCoins) {
81
96
  if (c.getChain() === name) {
@@ -92,4 +107,20 @@ function getUtxoCoinForNetwork(n) {
92
107
  }
93
108
  throw new Error(`no coin for network ${utxolib.getNetworkName(n)}`);
94
109
  }
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b0NvaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3V0aWwvdXR4b0NvaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1FQSxrQ0FPQztBQUVELHNEQU9DO0FBbkZELHlEQUEyQztBQUMzQyw0Q0FBMEM7QUFDMUMsOENBQTRDO0FBRTVDLHNDQXNCc0I7QUFFVCxRQUFBLFlBQVksR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFFMUUsTUFBTSxlQUFlLEdBQUc7SUFDdEIsU0FBRztJQUNILFVBQUk7SUFDSixXQUFLO0lBQ0wsYUFBTztJQUNQLGVBQVM7SUFDVCxTQUFHO0lBQ0gsVUFBSTtJQUNKLFVBQUk7SUFDSixXQUFLO0lBQ0wsU0FBRztJQUNILFVBQUk7SUFDSixTQUFHO0lBQ0gsU0FBRztJQUNILFVBQUk7SUFDSixVQUFJO0lBQ0osV0FBSztJQUNMLFVBQUk7SUFDSixXQUFLO0lBQ0wsU0FBRztJQUNILFVBQUk7Q0FDTCxDQUFDO0FBRUYsU0FBUyxZQUFZLENBQUMsUUFBa0Isb0JBQVk7SUFDbEQsT0FBTyxlQUFlO1NBQ25CLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBb0IsRUFBRTtRQUM3QixJQUFJLENBQUM7WUFDSCxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUMsQ0FBQztTQUNELElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDL0csQ0FBQztBQUVZLFFBQUEsU0FBUyxHQUFHLFlBQVksRUFBRSxDQUFDO0FBRXhDLFNBQWdCLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLEtBQUssTUFBTSxDQUFDLElBQUksaUJBQVMsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxDQUFrQjtJQUN0RCxLQUFLLE1BQU0sQ0FBQyxJQUFJLGlCQUFTLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFRlc3RCaXRHbyB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5cbmltcG9ydCB7XG4gIEFic3RyYWN0VXR4b0NvaW4sXG4gIEJ0YyxcbiAgVGJ0YyxcbiAgVGJ0YzQsXG4gIFRidGNzaWcsXG4gIFRidGNiZ3NpZyxcbiAgQmNoLFxuICBUYmNoLFxuICBCY2hhLFxuICBUYmNoYSxcbiAgQnN2LFxuICBUYnN2LFxuICBCdGcsXG4gIEx0YyxcbiAgVGx0YyxcbiAgRGFzaCxcbiAgVGRhc2gsXG4gIERvZ2UsXG4gIFRkb2dlLFxuICBaZWMsXG4gIFR6ZWMsXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0Qml0R28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG5cbmNvbnN0IHV0eG9Db2luQ2xhc3NlcyA9IFtcbiAgQnRjLFxuICBUYnRjLFxuICBUYnRjNCxcbiAgVGJ0Y3NpZyxcbiAgVGJ0Y2Jnc2lnLFxuICBCY2gsXG4gIFRiY2gsXG4gIEJjaGEsXG4gIFRiY2hhLFxuICBCc3YsXG4gIFRic3YsXG4gIEJ0ZyxcbiAgTHRjLFxuICBUbHRjLFxuICBEYXNoLFxuICBUZGFzaCxcbiAgRG9nZSxcbiAgVGRvZ2UsXG4gIFplYyxcbiAgVHplYyxcbl07XG5cbmZ1bmN0aW9uIGdldFV0eG9Db2lucyhiaXRnbzogQml0R29BUEkgPSBkZWZhdWx0Qml0R28pOiBBYnN0cmFjdFV0eG9Db2luW10ge1xuICByZXR1cm4gdXR4b0NvaW5DbGFzc2VzXG4gICAgLm1hcCgoY2xzKTogQWJzdHJhY3RVdHhvQ29pbiA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gY2xzLmNyZWF0ZUluc3RhbmNlKGJpdGdvKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBlcnJvciBjcmVhdGluZyAke2Nscy5uYW1lfTogJHtlfWApO1xuICAgICAgfVxuICAgIH0pXG4gICAgLnNvcnQoKGEsIGIpID0+IHV0eG9saWIuZ2V0TmV0d29ya0xpc3QoKS5pbmRleE9mKGEubmV0d29yaykgLSB1dHhvbGliLmdldE5ldHdvcmtMaXN0KCkuaW5kZXhPZihiLm5ldHdvcmspKTtcbn1cblxuZXhwb3J0IGNvbnN0IHV0eG9Db2lucyA9IGdldFV0eG9Db2lucygpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXR4b0NvaW4obmFtZTogc3RyaW5nKTogQWJzdHJhY3RVdHhvQ29pbiB7XG4gIGZvciAoY29uc3QgYyBvZiB1dHhvQ29pbnMpIHtcbiAgICBpZiAoYy5nZXRDaGFpbigpID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBubyBjb2luIHdpdGggbmFtZSAke25hbWV9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVdHhvQ29pbkZvck5ldHdvcmsobjogdXR4b2xpYi5OZXR3b3JrKTogQWJzdHJhY3RVdHhvQ29pbiB7XG4gIGZvciAoY29uc3QgYyBvZiB1dHhvQ29pbnMpIHtcbiAgICBpZiAoYy5uZXR3b3JrID09PSBuKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBubyBjb2luIGZvciBuZXR3b3JrICR7dXR4b2xpYi5nZXROZXR3b3JrTmFtZShuKX1gKTtcbn1cbiJdfQ==
110
+ function getScriptTypes(coin, txFormat) {
111
+ return ['p2shP2pk', 'p2sh', 'p2shP2wsh', 'p2wsh', 'p2tr', 'p2trMusig2', 'taprootKeyPathSpend'].filter((t) => {
112
+ if (t === 'p2shP2pk') {
113
+ return (0, src_1.getReplayProtectionAddresses)(coin.name).length > 0;
114
+ }
115
+ if (txFormat === 'legacy') {
116
+ if (t === 'p2tr' || t === 'p2trMusig2' || t === 'taprootKeyPathSpend') {
117
+ return false;
118
+ }
119
+ }
120
+ if (t === 'taprootKeyPathSpend') {
121
+ return coin.supportsAddressType('p2trMusig2');
122
+ }
123
+ return coin.supportsAddressType(t);
124
+ });
125
+ }
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b0NvaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3V0aWwvdXR4b0NvaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStFQSwwQ0FFQztBQUVELGtDQU9DO0FBRUQsc0RBT0M7QUFJRCx3Q0FpQkM7QUF4SEQseURBQTJDO0FBQzNDLDRDQUEwQztBQUMxQyw4Q0FBNEM7QUFFNUMsc0NBdUJzQjtBQUVULFFBQUEsWUFBWSxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUUxRSxNQUFNLGVBQWUsR0FBRztJQUN0QixTQUFHO0lBQ0gsVUFBSTtJQUNKLFdBQUs7SUFDTCxhQUFPO0lBQ1AsZUFBUztJQUNULFNBQUc7SUFDSCxVQUFJO0lBQ0osVUFBSTtJQUNKLFdBQUs7SUFDTCxTQUFHO0lBQ0gsVUFBSTtJQUNKLFNBQUc7SUFDSCxTQUFHO0lBQ0gsVUFBSTtJQUNKLFVBQUk7SUFDSixXQUFLO0lBQ0wsVUFBSTtJQUNKLFdBQUs7SUFDTCxTQUFHO0lBQ0gsVUFBSTtDQUNMLENBQUM7QUFFRixTQUFTLFlBQVksQ0FBQyxRQUFrQixvQkFBWTtJQUNsRCxPQUFPLGVBQWU7U0FDbkIsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFvQixFQUFFO1FBQzdCLElBQUksQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUMvRyxDQUFDO0FBRVksUUFBQSxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUM7QUFFeEM7Ozs7O0dBS0c7QUFDVSxRQUFBLGdCQUFnQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQVUsQ0FBQztBQUUvRDs7R0FFRztBQUNILFNBQWdCLGVBQWU7SUFDN0IsT0FBTyx3QkFBZ0IsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLEtBQUssTUFBTSxDQUFDLElBQUksaUJBQVMsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxDQUFrQjtJQUN0RCxLQUFLLE1BQU0sQ0FBQyxJQUFJLGlCQUFTLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFJRCxTQUFnQixjQUFjLENBQUMsSUFBc0IsRUFBRSxRQUFrQjtJQUN2RSxPQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUscUJBQXFCLENBQVcsQ0FBQyxNQUFNLENBQzlHLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDSixJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUEsa0NBQTRCLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELElBQUksUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssWUFBWSxJQUFJLENBQUMsS0FBSyxxQkFBcUIsRUFBRSxDQUFDO2dCQUN0RSxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztZQUNoQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBUZXN0Qml0R28gfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuXG5pbXBvcnQge1xuICBBYnN0cmFjdFV0eG9Db2luLFxuICBCdGMsXG4gIFRidGMsXG4gIFRidGM0LFxuICBUYnRjc2lnLFxuICBUYnRjYmdzaWcsXG4gIEJjaCxcbiAgVGJjaCxcbiAgQmNoYSxcbiAgVGJjaGEsXG4gIEJzdixcbiAgVGJzdixcbiAgQnRnLFxuICBMdGMsXG4gIFRsdGMsXG4gIERhc2gsXG4gIFRkYXNoLFxuICBEb2dlLFxuICBUZG9nZSxcbiAgWmVjLFxuICBUemVjLFxuICBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzLFxufSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEJpdEdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ21vY2snIH0pO1xuXG5jb25zdCB1dHhvQ29pbkNsYXNzZXMgPSBbXG4gIEJ0YyxcbiAgVGJ0YyxcbiAgVGJ0YzQsXG4gIFRidGNzaWcsXG4gIFRidGNiZ3NpZyxcbiAgQmNoLFxuICBUYmNoLFxuICBCY2hhLFxuICBUYmNoYSxcbiAgQnN2LFxuICBUYnN2LFxuICBCdGcsXG4gIEx0YyxcbiAgVGx0YyxcbiAgRGFzaCxcbiAgVGRhc2gsXG4gIERvZ2UsXG4gIFRkb2dlLFxuICBaZWMsXG4gIFR6ZWMsXG5dO1xuXG5mdW5jdGlvbiBnZXRVdHhvQ29pbnMoYml0Z286IEJpdEdvQVBJID0gZGVmYXVsdEJpdEdvKTogQWJzdHJhY3RVdHhvQ29pbltdIHtcbiAgcmV0dXJuIHV0eG9Db2luQ2xhc3Nlc1xuICAgIC5tYXAoKGNscyk6IEFic3RyYWN0VXR4b0NvaW4gPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNscy5jcmVhdGVJbnN0YW5jZShiaXRnbyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZXJyb3IgY3JlYXRpbmcgJHtjbHMubmFtZX06ICR7ZX1gKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5zb3J0KChhLCBiKSA9PiB1dHhvbGliLmdldE5ldHdvcmtMaXN0KCkuaW5kZXhPZihhLm5ldHdvcmspIC0gdXR4b2xpYi5nZXROZXR3b3JrTGlzdCgpLmluZGV4T2YoYi5uZXR3b3JrKSk7XG59XG5cbmV4cG9ydCBjb25zdCB1dHhvQ29pbnMgPSBnZXRVdHhvQ29pbnMoKTtcblxuLyoqXG4gKiBNaW5pbWFsIHN1YnNldCBvZiBjb2lucyBmb3IgY29tcHJlaGVuc2l2ZSB0ZXN0IGNvdmVyYWdlLlxuICogLSBidGM6IEZ1bGwgZmVhdHVyZSBzZXQgKHNlZ3dpdCwgdGFwcm9vdCwgbXVzaWcyKVxuICogLSBiY2g6IHJlcGxheSBwcm90ZWN0aW9uIGFkZHJlc3Nlc1xuICogLSB6ZWM6IHNwZWNpYWwgdHJhbnNhY3Rpb24gZm9ybWF0IChPdmVyd2ludGVyL1NhcGxpbmcpXG4gKi9cbmV4cG9ydCBjb25zdCBtaW5VdHhvQ29pbk5hbWVzID0gWydidGMnLCAnYmNoJywgJ3plYyddIGFzIGNvbnN0O1xuXG4vKipcbiAqIEdldCBtaW5pbWFsIHNldCBvZiBjb2lucyBmb3IgdGVzdGluZy4gQ292ZXJzIH45OSUgb2YgZmVhdHVyZSBwYXRocy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1pblV0eG9Db2lucygpOiBBYnN0cmFjdFV0eG9Db2luW10ge1xuICByZXR1cm4gbWluVXR4b0NvaW5OYW1lcy5tYXAoZ2V0VXR4b0NvaW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXR4b0NvaW4obmFtZTogc3RyaW5nKTogQWJzdHJhY3RVdHhvQ29pbiB7XG4gIGZvciAoY29uc3QgYyBvZiB1dHhvQ29pbnMpIHtcbiAgICBpZiAoYy5nZXRDaGFpbigpID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBubyBjb2luIHdpdGggbmFtZSAke25hbWV9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVdHhvQ29pbkZvck5ldHdvcmsobjogdXR4b2xpYi5OZXR3b3JrKTogQWJzdHJhY3RVdHhvQ29pbiB7XG4gIGZvciAoY29uc3QgYyBvZiB1dHhvQ29pbnMpIHtcbiAgICBpZiAoYy5uZXR3b3JrID09PSBuKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBubyBjb2luIGZvciBuZXR3b3JrICR7dXR4b2xpYi5nZXROZXR3b3JrTmFtZShuKX1gKTtcbn1cblxuZXhwb3J0IHR5cGUgVHhGb3JtYXQgPSAnbGVnYWN5JyB8ICdwc2J0JztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjcmlwdFR5cGVzKGNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHR4Rm9ybWF0OiBUeEZvcm1hdCk6IHV0eG9saWIudGVzdHV0aWwuSW5wdXRTY3JpcHRUeXBlW10ge1xuICByZXR1cm4gKFsncDJzaFAycGsnLCAncDJzaCcsICdwMnNoUDJ3c2gnLCAncDJ3c2gnLCAncDJ0cicsICdwMnRyTXVzaWcyJywgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXSBhcyBjb25zdCkuZmlsdGVyKFxuICAgICh0KSA9PiB7XG4gICAgICBpZiAodCA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgICByZXR1cm4gZ2V0UmVwbGF5UHJvdGVjdGlvbkFkZHJlc3Nlcyhjb2luLm5hbWUpLmxlbmd0aCA+IDA7XG4gICAgICB9XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdsZWdhY3knKSB7XG4gICAgICAgIGlmICh0ID09PSAncDJ0cicgfHwgdCA9PT0gJ3AydHJNdXNpZzInIHx8IHQgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHQgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJykge1xuICAgICAgICByZXR1cm4gY29pbi5zdXBwb3J0c0FkZHJlc3NUeXBlKCdwMnRyTXVzaWcyJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29pbi5zdXBwb3J0c0FkZHJlc3NUeXBlKHQpO1xuICAgIH1cbiAgKTtcbn1cbiJdfQ==