@atomiqlabs/sdk 8.7.7 → 8.8.4

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 (339) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +1760 -1760
  3. package/dist/SmartChainAssets.d.ts +181 -181
  4. package/dist/SmartChainAssets.js +181 -181
  5. package/dist/bitcoin/coinselect2/accumulative.d.ts +7 -6
  6. package/dist/bitcoin/coinselect2/accumulative.js +52 -52
  7. package/dist/bitcoin/coinselect2/blackjack.d.ts +7 -6
  8. package/dist/bitcoin/coinselect2/blackjack.js +38 -38
  9. package/dist/bitcoin/coinselect2/index.d.ts +20 -19
  10. package/dist/bitcoin/coinselect2/index.js +69 -69
  11. package/dist/bitcoin/coinselect2/utils.d.ts +82 -77
  12. package/dist/bitcoin/coinselect2/utils.js +158 -123
  13. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +113 -130
  14. package/dist/bitcoin/wallet/BitcoinWallet.js +335 -322
  15. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +116 -78
  16. package/dist/bitcoin/wallet/IBitcoinWallet.js +21 -21
  17. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +106 -101
  18. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +196 -190
  19. package/dist/enums/FeeType.d.ts +15 -15
  20. package/dist/enums/FeeType.js +19 -19
  21. package/dist/enums/SwapAmountType.d.ts +15 -15
  22. package/dist/enums/SwapAmountType.js +19 -19
  23. package/dist/enums/SwapDirection.d.ts +15 -15
  24. package/dist/enums/SwapDirection.js +19 -19
  25. package/dist/enums/SwapSide.d.ts +15 -15
  26. package/dist/enums/SwapSide.js +19 -19
  27. package/dist/enums/SwapType.d.ts +75 -75
  28. package/dist/enums/SwapType.js +79 -79
  29. package/dist/errors/IntermediaryError.d.ts +13 -13
  30. package/dist/errors/IntermediaryError.js +27 -27
  31. package/dist/errors/RequestError.d.ts +32 -32
  32. package/dist/errors/RequestError.js +54 -54
  33. package/dist/errors/UserError.d.ts +8 -8
  34. package/dist/errors/UserError.js +16 -16
  35. package/dist/events/UnifiedSwapEventListener.d.ts +23 -23
  36. package/dist/events/UnifiedSwapEventListener.js +132 -132
  37. package/dist/http/HttpUtils.d.ts +27 -27
  38. package/dist/http/HttpUtils.js +91 -91
  39. package/dist/http/paramcoders/IParamReader.d.ts +8 -8
  40. package/dist/http/paramcoders/IParamReader.js +2 -2
  41. package/dist/http/paramcoders/ParamDecoder.d.ts +44 -44
  42. package/dist/http/paramcoders/ParamDecoder.js +137 -137
  43. package/dist/http/paramcoders/ParamEncoder.d.ts +20 -20
  44. package/dist/http/paramcoders/ParamEncoder.js +36 -36
  45. package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -26
  46. package/dist/http/paramcoders/SchemaVerifier.js +145 -145
  47. package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -11
  48. package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -57
  49. package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -13
  50. package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -26
  51. package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -16
  52. package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -174
  53. package/dist/index.d.ts +85 -85
  54. package/dist/index.js +158 -158
  55. package/dist/intermediaries/Intermediary.d.ts +178 -178
  56. package/dist/intermediaries/Intermediary.js +166 -166
  57. package/dist/intermediaries/IntermediaryDiscovery.d.ts +211 -211
  58. package/dist/intermediaries/IntermediaryDiscovery.js +424 -424
  59. package/dist/intermediaries/apis/IntermediaryAPI.d.ts +450 -440
  60. package/dist/intermediaries/apis/IntermediaryAPI.js +618 -603
  61. package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +155 -155
  62. package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +137 -137
  63. package/dist/lnurl/LNURL.d.ts +102 -102
  64. package/dist/lnurl/LNURL.js +321 -321
  65. package/dist/prices/RedundantSwapPrice.d.ts +110 -110
  66. package/dist/prices/RedundantSwapPrice.js +222 -222
  67. package/dist/prices/SingleSwapPrice.d.ts +34 -34
  68. package/dist/prices/SingleSwapPrice.js +44 -44
  69. package/dist/prices/SwapPriceWithChain.d.ts +107 -107
  70. package/dist/prices/SwapPriceWithChain.js +128 -128
  71. package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -28
  72. package/dist/prices/abstract/ICachedSwapPrice.js +62 -62
  73. package/dist/prices/abstract/IPriceProvider.d.ts +81 -81
  74. package/dist/prices/abstract/IPriceProvider.js +74 -74
  75. package/dist/prices/abstract/ISwapPrice.d.ts +168 -168
  76. package/dist/prices/abstract/ISwapPrice.js +279 -279
  77. package/dist/prices/providers/BinancePriceProvider.d.ts +23 -23
  78. package/dist/prices/providers/BinancePriceProvider.js +30 -30
  79. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +23 -23
  80. package/dist/prices/providers/CoinGeckoPriceProvider.js +29 -29
  81. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +25 -25
  82. package/dist/prices/providers/CoinPaprikaPriceProvider.js +29 -29
  83. package/dist/prices/providers/CustomPriceProvider.d.ts +24 -24
  84. package/dist/prices/providers/CustomPriceProvider.js +35 -35
  85. package/dist/prices/providers/KrakenPriceProvider.d.ts +38 -38
  86. package/dist/prices/providers/KrakenPriceProvider.js +45 -45
  87. package/dist/prices/providers/OKXPriceProvider.d.ts +34 -34
  88. package/dist/prices/providers/OKXPriceProvider.js +29 -29
  89. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +17 -17
  90. package/dist/prices/providers/abstract/ExchangePriceProvider.js +21 -21
  91. package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -7
  92. package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -12
  93. package/dist/storage/IUnifiedStorage.d.ts +85 -85
  94. package/dist/storage/IUnifiedStorage.js +2 -2
  95. package/dist/storage/UnifiedSwapStorage.d.ts +114 -114
  96. package/dist/storage/UnifiedSwapStorage.js +116 -116
  97. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +63 -63
  98. package/dist/storage-browser/IndexedDBUnifiedStorage.js +298 -298
  99. package/dist/storage-browser/LocalStorageManager.d.ts +49 -49
  100. package/dist/storage-browser/LocalStorageManager.js +93 -93
  101. package/dist/swapper/Swapper.d.ts +732 -692
  102. package/dist/swapper/Swapper.js +1713 -1657
  103. package/dist/swapper/SwapperFactory.d.ts +135 -135
  104. package/dist/swapper/SwapperFactory.js +162 -162
  105. package/dist/swapper/SwapperUtils.d.ts +206 -206
  106. package/dist/swapper/SwapperUtils.js +481 -481
  107. package/dist/swapper/SwapperWithChain.d.ts +404 -404
  108. package/dist/swapper/SwapperWithChain.js +469 -469
  109. package/dist/swapper/SwapperWithSigner.d.ts +322 -322
  110. package/dist/swapper/SwapperWithSigner.js +318 -318
  111. package/dist/swaps/IAddressSwap.d.ts +22 -22
  112. package/dist/swaps/IAddressSwap.js +14 -14
  113. package/dist/swaps/IBTCWalletSwap.d.ts +73 -73
  114. package/dist/swaps/IBTCWalletSwap.js +18 -18
  115. package/dist/swaps/IClaimableSwap.d.ts +49 -49
  116. package/dist/swaps/IClaimableSwap.js +15 -15
  117. package/dist/swaps/IClaimableSwapWrapper.d.ts +15 -15
  118. package/dist/swaps/IClaimableSwapWrapper.js +2 -2
  119. package/dist/swaps/IRefundableSwap.d.ts +43 -43
  120. package/dist/swaps/IRefundableSwap.js +14 -14
  121. package/dist/swaps/ISwap.d.ts +392 -392
  122. package/dist/swaps/ISwap.js +349 -349
  123. package/dist/swaps/ISwapWithGasDrop.d.ts +21 -21
  124. package/dist/swaps/ISwapWithGasDrop.js +12 -12
  125. package/dist/swaps/ISwapWrapper.d.ts +285 -285
  126. package/dist/swaps/ISwapWrapper.js +353 -353
  127. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +98 -98
  128. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +126 -126
  129. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +139 -139
  130. package/dist/swaps/escrow_swaps/IEscrowSwap.js +170 -170
  131. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +128 -128
  132. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +167 -167
  133. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +105 -105
  134. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +129 -129
  135. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +162 -162
  136. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +190 -190
  137. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +64 -64
  138. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +82 -82
  139. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +531 -531
  140. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +1285 -1285
  141. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +190 -190
  142. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +432 -432
  143. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +583 -583
  144. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +1371 -1371
  145. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +235 -235
  146. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +525 -525
  147. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +458 -458
  148. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +1126 -1126
  149. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +202 -202
  150. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +406 -406
  151. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +403 -403
  152. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +924 -924
  153. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +68 -68
  154. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +117 -117
  155. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +127 -127
  156. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +256 -256
  157. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +251 -251
  158. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +536 -536
  159. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +73 -73
  160. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +155 -155
  161. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +132 -132
  162. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +286 -286
  163. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +637 -631
  164. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1448 -1444
  165. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +257 -225
  166. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +947 -822
  167. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +261 -261
  168. package/dist/swaps/trusted/ln/LnForGasSwap.js +511 -511
  169. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +40 -40
  170. package/dist/swaps/trusted/ln/LnForGasWrapper.js +83 -83
  171. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +342 -342
  172. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +715 -715
  173. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +69 -69
  174. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +93 -93
  175. package/dist/types/AmountData.d.ts +10 -10
  176. package/dist/types/AmountData.js +2 -2
  177. package/dist/types/CustomPriceFunction.d.ts +11 -11
  178. package/dist/types/CustomPriceFunction.js +2 -2
  179. package/dist/types/PriceInfoType.d.ts +28 -28
  180. package/dist/types/PriceInfoType.js +57 -57
  181. package/dist/types/SwapExecutionAction.d.ts +88 -88
  182. package/dist/types/SwapExecutionAction.js +2 -2
  183. package/dist/types/SwapStateInfo.d.ts +5 -5
  184. package/dist/types/SwapStateInfo.js +2 -2
  185. package/dist/types/SwapWithSigner.d.ts +17 -17
  186. package/dist/types/SwapWithSigner.js +43 -43
  187. package/dist/types/Token.d.ts +99 -99
  188. package/dist/types/Token.js +76 -76
  189. package/dist/types/TokenAmount.d.ts +69 -69
  190. package/dist/types/TokenAmount.js +60 -60
  191. package/dist/types/fees/Fee.d.ts +50 -50
  192. package/dist/types/fees/Fee.js +2 -2
  193. package/dist/types/fees/FeeBreakdown.d.ts +11 -11
  194. package/dist/types/fees/FeeBreakdown.js +2 -2
  195. package/dist/types/fees/PercentagePPM.d.ts +17 -17
  196. package/dist/types/fees/PercentagePPM.js +18 -18
  197. package/dist/types/lnurl/LNURLPay.d.ts +61 -61
  198. package/dist/types/lnurl/LNURLPay.js +31 -31
  199. package/dist/types/lnurl/LNURLWithdraw.d.ts +48 -48
  200. package/dist/types/lnurl/LNURLWithdraw.js +27 -27
  201. package/dist/types/wallets/LightningInvoiceCreateService.d.ts +24 -24
  202. package/dist/types/wallets/LightningInvoiceCreateService.js +15 -15
  203. package/dist/types/wallets/MinimalBitcoinWalletInterface.d.ts +23 -23
  204. package/dist/types/wallets/MinimalBitcoinWalletInterface.js +2 -2
  205. package/dist/types/wallets/MinimalLightningNetworkWalletInterface.d.ts +9 -9
  206. package/dist/types/wallets/MinimalLightningNetworkWalletInterface.js +2 -2
  207. package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -1
  208. package/dist/utils/AutomaticClockDriftCorrection.js +70 -70
  209. package/dist/utils/BitcoinUtils.d.ts +16 -14
  210. package/dist/utils/BitcoinUtils.js +141 -102
  211. package/dist/utils/BitcoinWalletUtils.d.ts +7 -7
  212. package/dist/utils/BitcoinWalletUtils.js +14 -14
  213. package/dist/utils/Logger.d.ts +7 -7
  214. package/dist/utils/Logger.js +12 -12
  215. package/dist/utils/RetryUtils.d.ts +22 -22
  216. package/dist/utils/RetryUtils.js +67 -67
  217. package/dist/utils/SwapUtils.d.ts +88 -88
  218. package/dist/utils/SwapUtils.js +72 -72
  219. package/dist/utils/TimeoutUtils.d.ts +17 -17
  220. package/dist/utils/TimeoutUtils.js +55 -55
  221. package/dist/utils/TokenUtils.d.ts +19 -19
  222. package/dist/utils/TokenUtils.js +37 -37
  223. package/dist/utils/TypeUtils.d.ts +7 -7
  224. package/dist/utils/TypeUtils.js +2 -2
  225. package/dist/utils/Utils.d.ts +67 -67
  226. package/dist/utils/Utils.js +208 -208
  227. package/package.json +43 -43
  228. package/src/SmartChainAssets.ts +186 -186
  229. package/src/bitcoin/coinselect2/accumulative.ts +69 -68
  230. package/src/bitcoin/coinselect2/blackjack.ts +50 -49
  231. package/src/bitcoin/coinselect2/index.ts +93 -92
  232. package/src/bitcoin/coinselect2/utils.ts +236 -195
  233. package/src/bitcoin/wallet/BitcoinWallet.ts +439 -427
  234. package/src/bitcoin/wallet/IBitcoinWallet.ts +140 -99
  235. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +225 -217
  236. package/src/enums/FeeType.ts +15 -15
  237. package/src/enums/SwapAmountType.ts +16 -16
  238. package/src/enums/SwapDirection.ts +15 -15
  239. package/src/enums/SwapSide.ts +16 -16
  240. package/src/enums/SwapType.ts +75 -75
  241. package/src/errors/IntermediaryError.ts +28 -28
  242. package/src/errors/RequestError.ts +64 -64
  243. package/src/errors/UserError.ts +15 -15
  244. package/src/events/UnifiedSwapEventListener.ts +173 -173
  245. package/src/http/HttpUtils.ts +91 -91
  246. package/src/http/paramcoders/IParamReader.ts +9 -9
  247. package/src/http/paramcoders/ParamDecoder.ts +145 -145
  248. package/src/http/paramcoders/ParamEncoder.ts +40 -40
  249. package/src/http/paramcoders/SchemaVerifier.ts +153 -153
  250. package/src/http/paramcoders/client/ResponseParamDecoder.ts +57 -57
  251. package/src/http/paramcoders/client/StreamParamEncoder.ts +28 -28
  252. package/src/http/paramcoders/client/StreamingFetchPromise.ts +192 -192
  253. package/src/index.ts +140 -140
  254. package/src/intermediaries/Intermediary.ts +280 -280
  255. package/src/intermediaries/IntermediaryDiscovery.ts +541 -541
  256. package/src/intermediaries/apis/IntermediaryAPI.ts +963 -947
  257. package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -257
  258. package/src/lnurl/LNURL.ts +402 -402
  259. package/src/prices/RedundantSwapPrice.ts +264 -264
  260. package/src/prices/SingleSwapPrice.ts +50 -50
  261. package/src/prices/SwapPriceWithChain.ts +194 -194
  262. package/src/prices/abstract/ICachedSwapPrice.ts +85 -85
  263. package/src/prices/abstract/IPriceProvider.ts +127 -127
  264. package/src/prices/abstract/ISwapPrice.ts +390 -390
  265. package/src/prices/providers/BinancePriceProvider.ts +48 -48
  266. package/src/prices/providers/CoinGeckoPriceProvider.ts +46 -46
  267. package/src/prices/providers/CoinPaprikaPriceProvider.ts +49 -49
  268. package/src/prices/providers/CustomPriceProvider.ts +40 -40
  269. package/src/prices/providers/KrakenPriceProvider.ts +83 -83
  270. package/src/prices/providers/OKXPriceProvider.ts +59 -59
  271. package/src/prices/providers/abstract/ExchangePriceProvider.ts +31 -31
  272. package/src/prices/providers/abstract/HttpPriceProvider.ts +14 -14
  273. package/src/storage/IUnifiedStorage.ts +95 -95
  274. package/src/storage/UnifiedSwapStorage.ts +141 -141
  275. package/src/storage-browser/IndexedDBUnifiedStorage.ts +350 -350
  276. package/src/storage-browser/LocalStorageManager.ts +106 -106
  277. package/src/swapper/Swapper.ts +2488 -2416
  278. package/src/swapper/SwapperFactory.ts +307 -307
  279. package/src/swapper/SwapperUtils.ts +570 -570
  280. package/src/swapper/SwapperWithChain.ts +707 -707
  281. package/src/swapper/SwapperWithSigner.ts +511 -511
  282. package/src/swaps/IAddressSwap.ts +30 -30
  283. package/src/swaps/IBTCWalletSwap.ts +92 -92
  284. package/src/swaps/IClaimableSwap.ts +65 -65
  285. package/src/swaps/IClaimableSwapWrapper.ts +17 -17
  286. package/src/swaps/IRefundableSwap.ts +58 -58
  287. package/src/swaps/ISwap.ts +703 -703
  288. package/src/swaps/ISwapWithGasDrop.ts +25 -25
  289. package/src/swaps/ISwapWrapper.ts +539 -539
  290. package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +217 -217
  291. package/src/swaps/escrow_swaps/IEscrowSwap.ts +269 -269
  292. package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +282 -282
  293. package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +169 -169
  294. package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +300 -300
  295. package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +107 -107
  296. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1473 -1474
  297. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +601 -601
  298. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1582 -1582
  299. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +750 -750
  300. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +1299 -1299
  301. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +610 -610
  302. package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +1096 -1096
  303. package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +138 -138
  304. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +304 -304
  305. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +786 -786
  306. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +206 -206
  307. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +401 -401
  308. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1812 -1799
  309. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +1236 -1060
  310. package/src/swaps/trusted/ln/LnForGasSwap.ts +589 -589
  311. package/src/swaps/trusted/ln/LnForGasWrapper.ts +91 -91
  312. package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +862 -862
  313. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +131 -131
  314. package/src/types/AmountData.ts +9 -9
  315. package/src/types/CustomPriceFunction.ts +11 -11
  316. package/src/types/PriceInfoType.ts +66 -66
  317. package/src/types/SwapExecutionAction.ts +99 -99
  318. package/src/types/SwapStateInfo.ts +6 -6
  319. package/src/types/SwapWithSigner.ts +61 -61
  320. package/src/types/Token.ts +163 -163
  321. package/src/types/TokenAmount.ts +132 -132
  322. package/src/types/fees/Fee.ts +56 -56
  323. package/src/types/fees/FeeBreakdown.ts +11 -11
  324. package/src/types/fees/PercentagePPM.ts +26 -26
  325. package/src/types/lnurl/LNURLPay.ts +79 -79
  326. package/src/types/lnurl/LNURLWithdraw.ts +61 -61
  327. package/src/types/wallets/LightningInvoiceCreateService.ts +30 -30
  328. package/src/types/wallets/MinimalBitcoinWalletInterface.ts +21 -21
  329. package/src/types/wallets/MinimalLightningNetworkWalletInterface.ts +9 -9
  330. package/src/utils/AutomaticClockDriftCorrection.ts +71 -71
  331. package/src/utils/BitcoinUtils.ts +132 -91
  332. package/src/utils/BitcoinWalletUtils.ts +15 -15
  333. package/src/utils/Logger.ts +14 -14
  334. package/src/utils/RetryUtils.ts +78 -78
  335. package/src/utils/SwapUtils.ts +99 -99
  336. package/src/utils/TimeoutUtils.ts +49 -49
  337. package/src/utils/TokenUtils.ts +33 -33
  338. package/src/utils/TypeUtils.ts +8 -8
  339. package/src/utils/Utils.ts +212 -212
@@ -1,631 +1,637 @@
1
- import { ISwap, ISwapInit } from "../ISwap";
2
- import { ChainType, SpvWithdrawalClaimedState, SpvWithdrawalClosedState, SpvWithdrawalFrontedState } from "@atomiqlabs/base";
3
- import { SwapType } from "../../enums/SwapType";
4
- import { SpvFromBTCTypeDefinition, SpvFromBTCWrapper } from "./SpvFromBTCWrapper";
5
- import { Transaction } from "@scure/btc-signer";
6
- import { Fee } from "../../types/fees/Fee";
7
- import { IBitcoinWallet } from "../../bitcoin/wallet/IBitcoinWallet";
8
- import { IBTCWalletSwap } from "../IBTCWalletSwap";
9
- import { ISwapWithGasDrop } from "../ISwapWithGasDrop";
10
- import { MinimalBitcoinWalletInterface, MinimalBitcoinWalletInterfaceWithSigner } from "../../types/wallets/MinimalBitcoinWalletInterface";
11
- import { IClaimableSwap } from "../IClaimableSwap";
12
- import { FeeType } from "../../enums/FeeType";
13
- import { TokenAmount } from "../../types/TokenAmount";
14
- import { BtcToken, SCToken } from "../../types/Token";
15
- import { LoggerType } from "../../utils/Logger";
16
- import { PriceInfoType } from "../../types/PriceInfoType";
17
- import { SwapExecutionAction, SwapExecutionActionBitcoin } from "../../types/SwapExecutionAction";
18
- /**
19
- * State enum for SPV vault (UTXO-controlled vault) based swaps
20
- * @category Swaps/Bitcoin → Smart chain
21
- */
22
- export declare enum SpvFromBTCSwapState {
23
- /**
24
- * Catastrophic failure has occurred when processing the swap on the smart chain side,
25
- * this implies a bug in the smart contract code or the user and intermediary deliberately
26
- * creating a bitcoin transaction with invalid format unparsable by the smart contract.
27
- */
28
- CLOSED = -5,
29
- /**
30
- * Some of the bitcoin swap transaction inputs were double-spent, this means the swap
31
- * has failed and no BTC was sent
32
- */
33
- FAILED = -4,
34
- /**
35
- * The intermediary (LP) declined to co-sign the submitted PSBT, hence the swap failed
36
- */
37
- DECLINED = -3,
38
- /**
39
- * Swap has expired for good and there is no way how it can be executed anymore
40
- */
41
- QUOTE_EXPIRED = -2,
42
- /**
43
- * A swap is almost expired, and it should be presented to the user as expired, though
44
- * there is still a chance that it will be processed
45
- */
46
- QUOTE_SOFT_EXPIRED = -1,
47
- /**
48
- * Swap was created, use the {@link SpvFromBTCSwap.getFundedPsbt} or {@link SpvFromBTCSwap.getPsbt} functions
49
- * to get the bitcoin swap PSBT that should be signed by the user's wallet and then submitted via the
50
- * {@link SpvFromBTCSwap.submitPsbt} function.
51
- */
52
- CREATED = 0,
53
- /**
54
- * Swap bitcoin PSBT was submitted by the client to the SDK
55
- */
56
- SIGNED = 1,
57
- /**
58
- * Swap bitcoin PSBT sent to the intermediary (LP), waiting for the intermediary co-sign
59
- * it and broadcast. You can use the {@link SpvFromBTCSwap.waitTillClaimedOrFronted}
60
- * function to wait till the intermediary broadcasts the transaction and the transaction
61
- * confirms.
62
- */
63
- POSTED = 2,
64
- /**
65
- * Intermediary (LP) has co-signed and broadcasted the bitcoin transaction. You can use the
66
- * {@link SpvFromBTCSwap.waitTillClaimedOrFronted} function to wait till the transaction
67
- * confirms.
68
- */
69
- BROADCASTED = 3,
70
- /**
71
- * Settlement on the destination smart chain was fronted and funds were already received
72
- * by the user, even before the final settlement.
73
- */
74
- FRONTED = 4,
75
- /**
76
- * Bitcoin transaction confirmed with necessary amount of confirmations, wait for automatic
77
- * settlement by the watchtower with the {@link waitTillClaimedOrFronted} function, or settle manually
78
- * using the {@link FromBTCSwap.claim} or {@link FromBTCSwap.txsClaim} function.
79
- */
80
- BTC_TX_CONFIRMED = 5,
81
- /**
82
- * Swap settled on the smart chain and funds received
83
- */
84
- CLAIMED = 6
85
- }
86
- export type SpvFromBTCSwapInit = ISwapInit & {
87
- quoteId: string;
88
- recipient: string;
89
- vaultOwner: string;
90
- vaultId: bigint;
91
- vaultRequiredConfirmations: number;
92
- vaultTokenMultipliers: bigint[];
93
- vaultBtcAddress: string;
94
- vaultUtxo: string;
95
- vaultUtxoValue: bigint;
96
- btcDestinationAddress: string;
97
- btcAmount: bigint;
98
- btcAmountSwap: bigint;
99
- btcAmountGas: bigint;
100
- minimumBtcFeeRate: number;
101
- outputTotalSwap: bigint;
102
- outputSwapToken: string;
103
- outputTotalGas: bigint;
104
- outputGasToken: string;
105
- gasSwapFeeBtc: bigint;
106
- gasSwapFee: bigint;
107
- callerFeeShare: bigint;
108
- frontingFeeShare: bigint;
109
- executionFeeShare: bigint;
110
- genesisSmartChainBlockHeight: number;
111
- gasPricingInfo?: PriceInfoType;
112
- };
113
- export declare function isSpvFromBTCSwapInit(obj: any): obj is SpvFromBTCSwapInit;
114
- /**
115
- * New spv vault (UTXO-controlled vault) based swaps for Bitcoin -> Smart chain swaps not requiring
116
- * any initiation on the destination chain, and with the added possibility for the user to receive
117
- * a native token on the destination chain as part of the swap (a "gas drop" feature).
118
- *
119
- * @category Swaps/Bitcoin → Smart chain
120
- */
121
- export declare class SpvFromBTCSwap<T extends ChainType> extends ISwap<T, SpvFromBTCTypeDefinition<T>> implements IBTCWalletSwap, ISwapWithGasDrop<T>, IClaimableSwap<T, SpvFromBTCTypeDefinition<T>, SpvFromBTCSwapState> {
122
- protected readonly currentVersion: number;
123
- readonly TYPE: SwapType.SPV_VAULT_FROM_BTC;
124
- /**
125
- * @internal
126
- */
127
- protected readonly swapStateDescription: {
128
- [-5]: string;
129
- [-4]: string;
130
- [-3]: string;
131
- [-2]: string;
132
- [-1]: string;
133
- 0: string;
134
- 1: string;
135
- 2: string;
136
- 3: string;
137
- 4: string;
138
- 5: string;
139
- 6: string;
140
- };
141
- /**
142
- * @internal
143
- */
144
- protected readonly swapStateName: (state: number) => string;
145
- /**
146
- * @inheritDoc
147
- * @internal
148
- */
149
- protected readonly logger: LoggerType;
150
- private readonly quoteId;
151
- private readonly recipient;
152
- private readonly vaultOwner;
153
- private readonly vaultId;
154
- private readonly vaultRequiredConfirmations;
155
- private readonly vaultTokenMultipliers;
156
- private readonly vaultBtcAddress;
157
- private readonly vaultUtxo;
158
- private readonly vaultUtxoValue;
159
- private readonly btcDestinationAddress;
160
- private readonly btcAmount;
161
- private readonly btcAmountSwap;
162
- private readonly btcAmountGas;
163
- private readonly outputTotalSwap;
164
- private readonly outputSwapToken;
165
- private readonly outputTotalGas;
166
- private readonly outputGasToken;
167
- private readonly gasSwapFeeBtc;
168
- private readonly gasSwapFee;
169
- private readonly callerFeeShare;
170
- private readonly frontingFeeShare;
171
- private readonly executionFeeShare;
172
- private readonly gasPricingInfo?;
173
- private posted?;
174
- /**
175
- * @internal
176
- */
177
- readonly _genesisSmartChainBlockHeight: number;
178
- /**
179
- * @internal
180
- */
181
- _senderAddress?: string;
182
- /**
183
- * @internal
184
- */
185
- _claimTxId?: string;
186
- /**
187
- * @internal
188
- */
189
- _frontTxId?: string;
190
- /**
191
- * @internal
192
- */
193
- _data?: T["SpvVaultWithdrawalData"];
194
- /**
195
- * Minimum fee rate in sats/vB that the input bitcoin transaction needs to pay
196
- */
197
- readonly minimumBtcFeeRate: number;
198
- /**
199
- * Time at which the SDK realized the bitcoin transaction was confirmed
200
- * @private
201
- */
202
- private btcTxConfirmedAt?;
203
- private _contract;
204
- constructor(wrapper: SpvFromBTCWrapper<T>, init: SpvFromBTCSwapInit);
205
- constructor(wrapper: SpvFromBTCWrapper<T>, obj: any);
206
- /**
207
- * @inheritDoc
208
- * @internal
209
- */
210
- protected upgradeVersion(): void;
211
- /**
212
- * @inheritDoc
213
- * @internal
214
- */
215
- protected tryCalculateSwapFee(): void;
216
- /**
217
- * @inheritDoc
218
- */
219
- refreshPriceData(): Promise<void>;
220
- /**
221
- * @inheritDoc
222
- * @internal
223
- */
224
- _getInitiator(): string;
225
- /**
226
- * @inheritDoc
227
- * @internal
228
- */
229
- _getEscrowHash(): string | null;
230
- /**
231
- * @inheritDoc
232
- */
233
- getId(): string;
234
- /**
235
- * @inheritDoc
236
- */
237
- getQuoteExpiry(): number;
238
- /**
239
- * @inheritDoc
240
- * @internal
241
- */
242
- _verifyQuoteDefinitelyExpired(): Promise<boolean>;
243
- /**
244
- * @inheritDoc
245
- * @internal
246
- */
247
- _verifyQuoteValid(): Promise<boolean>;
248
- /**
249
- * @inheritDoc
250
- */
251
- getOutputAddress(): string | null;
252
- /**
253
- * @inheritDoc
254
- */
255
- getOutputTxId(): string | null;
256
- /**
257
- * @inheritDoc
258
- */
259
- getInputAddress(): string | null;
260
- /**
261
- * @inheritDoc
262
- */
263
- getInputTxId(): string | null;
264
- /**
265
- * @inheritDoc
266
- */
267
- requiresAction(): boolean;
268
- /**
269
- * @inheritDoc
270
- */
271
- isFinished(): boolean;
272
- /**
273
- * @inheritDoc
274
- */
275
- isClaimable(): boolean;
276
- /**
277
- * @inheritDoc
278
- */
279
- isSuccessful(): boolean;
280
- /**
281
- * @inheritDoc
282
- */
283
- isFailed(): boolean;
284
- /**
285
- * @inheritDoc
286
- */
287
- isInProgress(): boolean;
288
- /**
289
- * @inheritDoc
290
- */
291
- isQuoteExpired(): boolean;
292
- /**
293
- * @inheritDoc
294
- */
295
- isQuoteSoftExpired(): boolean;
296
- /**
297
- * Returns the data about used spv vault (UTXO-controlled vault) to perform the swap
298
- */
299
- getSpvVaultData(): {
300
- owner: string;
301
- vaultId: bigint;
302
- utxo: string;
303
- };
304
- /**
305
- * Returns the input BTC amount in sats without any fees
306
- *
307
- * @internal
308
- */
309
- protected getInputSwapAmountWithoutFee(): bigint;
310
- /**
311
- * Returns the input gas BTC amount in sats without any fees
312
- *
313
- * @internal
314
- */
315
- protected getInputGasAmountWithoutFee(): bigint;
316
- /**
317
- * Returns to total input BTC amount in sats without any fees (this is BTC amount for the swap + BTC amount
318
- * for the gas drop).
319
- *
320
- * @internal
321
- */
322
- protected getInputAmountWithoutFee(): bigint;
323
- /**
324
- * Returns the swap output amount without any fees, this value is therefore always higher than
325
- * the actual received output.
326
- *
327
- * @internal
328
- */
329
- protected getOutputWithoutFee(): TokenAmount<SCToken<T["ChainId"]>, true>;
330
- /**
331
- * Returns the swap fee charged by the intermediary (LP) on this swap
332
- *
333
- * @internal
334
- */
335
- protected getSwapFee(): Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
336
- /**
337
- * Returns the fee to be paid to watchtowers on the destination chain to automatically
338
- * process and settle this swap without requiring any user interaction
339
- *
340
- * @internal
341
- */
342
- protected getWatchtowerFee(): Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
343
- /**
344
- * @inheritDoc
345
- */
346
- getFee(): Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
347
- /**
348
- * @inheritDoc
349
- */
350
- getFeeBreakdown(): [
351
- {
352
- type: FeeType.SWAP;
353
- fee: Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
354
- },
355
- {
356
- type: FeeType.NETWORK_OUTPUT;
357
- fee: Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
358
- }
359
- ];
360
- /**
361
- * @inheritDoc
362
- */
363
- getOutputToken(): SCToken<T["ChainId"]>;
364
- /**
365
- * @inheritDoc
366
- */
367
- getOutput(): TokenAmount<SCToken<T["ChainId"]>, true>;
368
- /**
369
- * @inheritDoc
370
- */
371
- getGasDropOutput(): TokenAmount<SCToken<T["ChainId"]>, true>;
372
- /**
373
- * @inheritDoc
374
- */
375
- getInputWithoutFee(): TokenAmount<BtcToken<false>, true>;
376
- /**
377
- * @inheritDoc
378
- */
379
- getInputToken(): BtcToken<false>;
380
- /**
381
- * @inheritDoc
382
- */
383
- getInput(): TokenAmount<BtcToken<false>, true>;
384
- /**
385
- * @inheritDoc
386
- */
387
- getRequiredConfirmationsCount(): number;
388
- /**
389
- * Returns raw transaction details that can be used to manually create a swap PSBT. It is better to use
390
- * the {@link getPsbt} or {@link getFundedPsbt} function retrieve an already prepared PSBT.
391
- */
392
- getTransactionDetails(): Promise<{
393
- in0txid: string;
394
- in0vout: number;
395
- in0sequence: number;
396
- vaultAmount: bigint;
397
- vaultScript: Uint8Array;
398
- in1sequence: number;
399
- out1script: Uint8Array;
400
- out2amount: bigint;
401
- out2script: Uint8Array;
402
- locktime: number;
403
- }>;
404
- /**
405
- * Returns the raw PSBT (not funded), the wallet should fund the PSBT (add its inputs) and importantly **set the nSequence field of the
406
- * 2nd input** (input 1 - indexing from 0) to the value returned in `in1sequence`, sign the PSBT and then pass
407
- * it back to the swap with {@link submitPsbt} function.
408
- */
409
- getPsbt(): Promise<{
410
- psbt: Transaction;
411
- psbtHex: string;
412
- psbtBase64: string;
413
- in1sequence: number;
414
- }>;
415
- /**
416
- * Returns the PSBT that is already funded with wallet's UTXOs (runs a coin-selection algorithm to choose UTXOs to use),
417
- * also returns inputs indices that need to be signed by the wallet before submitting the PSBT back to the SDK with
418
- * {@link submitPsbt}
419
- *
420
- * @remarks
421
- * Note that when passing the `feeRate` argument, the fee must be at least {@link minimumBtcFeeRate} sats/vB.
422
- *
423
- * @param _bitcoinWallet Sender's bitcoin wallet
424
- * @param feeRate Optional fee rate in sats/vB for the transaction
425
- * @param additionalOutputs additional outputs to add to the PSBT - can be used to collect fees from users
426
- */
427
- getFundedPsbt(_bitcoinWallet: IBitcoinWallet | MinimalBitcoinWalletInterface, feeRate?: number, additionalOutputs?: ({
428
- amount: bigint;
429
- outputScript: Uint8Array;
430
- } | {
431
- amount: bigint;
432
- address: string;
433
- })[]): Promise<{
434
- psbt: Transaction;
435
- psbtHex: string;
436
- psbtBase64: string;
437
- signInputs: number[];
438
- }>;
439
- /**
440
- * @inheritDoc
441
- */
442
- submitPsbt(_psbt: Transaction | string): Promise<string>;
443
- /**
444
- * @inheritDoc
445
- */
446
- estimateBitcoinFee(_bitcoinWallet: IBitcoinWallet | MinimalBitcoinWalletInterface, feeRate?: number): Promise<TokenAmount<BtcToken<false>, true> | null>;
447
- /**
448
- * @inheritDoc
449
- */
450
- sendBitcoinTransaction(wallet: IBitcoinWallet | MinimalBitcoinWalletInterfaceWithSigner, feeRate?: number): Promise<string>;
451
- /**
452
- * Executes the swap with the provided bitcoin wallet
453
- *
454
- * @param wallet Bitcoin wallet to use to sign the bitcoin transaction
455
- * @param callbacks Callbacks to track the progress of the swap
456
- * @param options Optional options for the swap like feeRate, AbortSignal, and timeouts/intervals
457
- *
458
- * @returns {boolean} Whether a swap was settled automatically by swap watchtowers or requires manual claim by the
459
- * user, in case `false` is returned the user should call the {@link claim} function to settle the swap on the
460
- * destination manually
461
- */
462
- execute(wallet: IBitcoinWallet | MinimalBitcoinWalletInterfaceWithSigner, callbacks?: {
463
- onSourceTransactionSent?: (sourceTxId: string) => void;
464
- onSourceTransactionConfirmationStatus?: (sourceTxId?: string, confirmations?: number, targetConfirations?: number, etaMs?: number) => void;
465
- onSourceTransactionConfirmed?: (sourceTxId: string) => void;
466
- onSwapSettled?: (destinationTxId: string) => void;
467
- }, options?: {
468
- feeRate?: number;
469
- abortSignal?: AbortSignal;
470
- btcTxCheckIntervalSeconds?: number;
471
- maxWaitTillAutomaticSettlementSeconds?: number;
472
- }): Promise<boolean>;
473
- /**
474
- * @inheritDoc
475
- *
476
- * @param options.bitcoinFeeRate Optional fee rate to use for the created Bitcoin transaction
477
- * @param options.bitcoinWallet Optional bitcoin wallet address specification to return a funded PSBT,
478
- * if not provided a raw PSBT is returned instead which necessitates the implementor to manually add
479
- * inputs to the bitcoin transaction and **set the nSequence field of the 2nd input** (input 1 -
480
- * indexing from 0) to the value returned in `in1sequence`
481
- */
482
- txsExecute(options?: {
483
- bitcoinFeeRate?: number;
484
- bitcoinWallet?: MinimalBitcoinWalletInterface;
485
- }): Promise<[
486
- SwapExecutionActionBitcoin<"RAW_PSBT" | "FUNDED_PSBT">
487
- ]>;
488
- /**
489
- * @inheritDoc
490
- *
491
- * @param options.bitcoinFeeRate Optional fee rate to use for the created Bitcoin transaction
492
- * @param options.bitcoinWallet Optional bitcoin wallet address specification to return a funded PSBT,
493
- * if not provided a raw PSBT is returned instead which necessitates the implementor to manually add
494
- * inputs to the bitcoin transaction and **set the nSequence field of the 2nd input** (input 1 -
495
- * indexing from 0) to the value returned in `in1sequence`
496
- * @param options.manualSettlementSmartChainSigner Optional smart chain signer to create a manual claim (settlement) transaction
497
- * @param options.maxWaitTillAutomaticSettlementSeconds Maximum time to wait for an automatic settlement after
498
- * the bitcoin transaction is confirmed (defaults to 60 seconds)
499
- */
500
- getCurrentActions(options?: {
501
- bitcoinFeeRate?: number;
502
- bitcoinWallet?: MinimalBitcoinWalletInterface;
503
- manualSettlementSmartChainSigner?: string | T["Signer"] | T["NativeSigner"];
504
- maxWaitTillAutomaticSettlementSeconds?: number;
505
- }): Promise<SwapExecutionAction<T>[]>;
506
- /**
507
- * Checks whether a bitcoin payment was already made, returns the payment or null when no payment has been made.
508
- * @internal
509
- */
510
- protected getBitcoinPayment(): Promise<{
511
- txId: string;
512
- confirmations: number;
513
- targetConfirmations: number;
514
- inputAddresses?: string[];
515
- } | null>;
516
- /**
517
- * @inheritDoc
518
- *
519
- * @throws {Error} if in invalid state (must be {@link SpvFromBTCSwapState.POSTED} or
520
- * {@link SpvFromBTCSwapState.BROADCASTED} states)
521
- */
522
- waitForBitcoinTransaction(updateCallback?: (txId?: string, confirmations?: number, targetConfirmations?: number, txEtaMs?: number) => void, checkIntervalSeconds?: number, abortSignal?: AbortSignal): Promise<string>;
523
- /**
524
- * Returns transactions for settling (claiming) the swap if the swap requires manual settlement, you can check so
525
- * with isClaimable. After sending the transaction manually be sure to call the waitTillClaimed function to wait
526
- * till the claim transaction is observed, processed by the SDK and state of the swap properly updated.
527
- *
528
- * @remarks
529
- * Might also return transactions necessary to sync the bitcoin light client.
530
- *
531
- * @param _signer Address of the signer to create the claim transactions for, can also be different to the recipient
532
- *
533
- * @throws {Error} If the swap is in invalid state (must be {@link SpvFromBTCSwapState.BTC_TX_CONFIRMED})
534
- */
535
- txsClaim(_signer?: string | T["Signer"] | T["NativeSigner"]): Promise<T["TX"][]>;
536
- /**
537
- * Settles the swap by claiming the funds on the destination chain if the swap requires manual settlement, you can
538
- * check so with isClaimable.
539
- *
540
- * @remarks
541
- * Might also sync the bitcoin light client during the process.
542
- *
543
- * @param _signer Signer to use for signing the settlement transactions, can also be different to the recipient
544
- * @param abortSignal Abort signal
545
- * @param onBeforeTxSent Optional callback triggered before the claim transaction is broadcasted
546
- *
547
- * @throws {Error} If the swap is in invalid state (must be {@link SpvFromBTCSwapState.BTC_TX_CONFIRMED})
548
- */
549
- claim(_signer: T["Signer"] | T["NativeSigner"], abortSignal?: AbortSignal, onBeforeTxSent?: (txId: string) => void): Promise<string>;
550
- /**
551
- * Periodically checks the chain to see whether the swap was finished (claimed or refunded)
552
- *
553
- * @param abortSignal
554
- * @param interval How often to check (in seconds), default to 5s
555
- * @internal
556
- */
557
- protected watchdogWaitTillResult(abortSignal?: AbortSignal, interval?: number): Promise<SpvWithdrawalClaimedState | SpvWithdrawalFrontedState | SpvWithdrawalClosedState>;
558
- /**
559
- * Waits till the swap is successfully settled (claimed), should be called after sending the claim (settlement)
560
- * transactions manually to wait till the SDK processes the settlement and updates the swap state accordingly.
561
- *
562
- * @remarks
563
- * This is an alias for the {@link waitTillClaimedOrFronted} function and will also resolve if the swap has
564
- * been fronted (not necessarily claimed)
565
- *
566
- * @param maxWaitTimeSeconds Maximum time in seconds to wait for the swap to be settled
567
- * @param abortSignal – AbortSignal
568
- *
569
- * @returns Whether the swap was claimed in time or not
570
- */
571
- waitTillClaimed(maxWaitTimeSeconds?: number, abortSignal?: AbortSignal): Promise<boolean>;
572
- /**
573
- * Waits till the swap is successfully fronted or settled on the destination chain
574
- *
575
- * @param maxWaitTimeSeconds Maximum time in seconds to wait for the swap to be settled (by default
576
- * it waits indefinitely)
577
- * @param abortSignal Abort signal
578
- *
579
- * @returns {boolean} whether the swap was claimed or fronted automatically or not, if the swap was not claimed
580
- * the user can claim manually through the {@link claim} function
581
- */
582
- waitTillClaimedOrFronted(maxWaitTimeSeconds?: number, abortSignal?: AbortSignal): Promise<boolean>;
583
- /**
584
- * Waits till the bitcoin transaction confirms and swap settled on the destination chain
585
- *
586
- * @param updateCallback Callback called when txId is found, and also called with subsequent confirmations
587
- * @param checkIntervalSeconds How often to check the bitcoin transaction (5 seconds by default)
588
- * @param abortSignal Abort signal
589
- *
590
- * @throws {Error} if in invalid state (must be {@link SpvFromBTCSwapState.POSTED} or
591
- * {@link SpvFromBTCSwapState.BROADCASTED} states)
592
- */
593
- waitTillExecuted(updateCallback?: (txId?: string, confirmations?: number, targetConfirmations?: number, txEtaMs?: number) => void, checkIntervalSeconds?: number, abortSignal?: AbortSignal): Promise<void>;
594
- /**
595
- * @inheritDoc
596
- */
597
- serialize(): any;
598
- /**
599
- * Used to set the txId of the bitcoin payment from the on-chain events listener
600
- *
601
- * @param txId
602
- * @internal
603
- */
604
- _setBitcoinTxId(txId: string): Promise<void>;
605
- private btcTxLastChecked?;
606
- /**
607
- * @internal
608
- */
609
- _syncStateFromBitcoin(save?: boolean): Promise<boolean>;
610
- /**
611
- * Checks the swap's state on-chain and compares it to its internal state, updates/changes it according to on-chain
612
- * data
613
- */
614
- private syncStateFromChain;
615
- /**
616
- * @inheritDoc
617
- * @internal
618
- */
619
- _sync(save?: boolean): Promise<boolean>;
620
- /**
621
- * @inheritDoc
622
- * @internal
623
- */
624
- _tick(save?: boolean): Promise<boolean>;
625
- /**
626
- * Checks whether an on-chain withdrawal state should be fetched for this specific swap
627
- *
628
- * @internal
629
- */
630
- _shouldCheckWithdrawalState(frontingAddress?: string | null, vaultDataUtxo?: string | null): Promise<boolean>;
631
- }
1
+ import { ISwap, ISwapInit } from "../ISwap";
2
+ import { ChainType, SpvWithdrawalClaimedState, SpvWithdrawalClosedState, SpvWithdrawalFrontedState } from "@atomiqlabs/base";
3
+ import { SwapType } from "../../enums/SwapType";
4
+ import { SpvFromBTCTypeDefinition, SpvFromBTCWrapper } from "./SpvFromBTCWrapper";
5
+ import { Transaction } from "@scure/btc-signer";
6
+ import { Fee } from "../../types/fees/Fee";
7
+ import { BitcoinWalletUtxo, IBitcoinWallet } from "../../bitcoin/wallet/IBitcoinWallet";
8
+ import { IBTCWalletSwap } from "../IBTCWalletSwap";
9
+ import { ISwapWithGasDrop } from "../ISwapWithGasDrop";
10
+ import { MinimalBitcoinWalletInterface, MinimalBitcoinWalletInterfaceWithSigner } from "../../types/wallets/MinimalBitcoinWalletInterface";
11
+ import { IClaimableSwap } from "../IClaimableSwap";
12
+ import { FeeType } from "../../enums/FeeType";
13
+ import { TokenAmount } from "../../types/TokenAmount";
14
+ import { BtcToken, SCToken } from "../../types/Token";
15
+ import { LoggerType } from "../../utils/Logger";
16
+ import { PriceInfoType } from "../../types/PriceInfoType";
17
+ import { SwapExecutionAction, SwapExecutionActionBitcoin } from "../../types/SwapExecutionAction";
18
+ /**
19
+ * State enum for SPV vault (UTXO-controlled vault) based swaps
20
+ * @category Swaps/Bitcoin → Smart chain
21
+ */
22
+ export declare enum SpvFromBTCSwapState {
23
+ /**
24
+ * Catastrophic failure has occurred when processing the swap on the smart chain side,
25
+ * this implies a bug in the smart contract code or the user and intermediary deliberately
26
+ * creating a bitcoin transaction with invalid format unparsable by the smart contract.
27
+ */
28
+ CLOSED = -5,
29
+ /**
30
+ * Some of the bitcoin swap transaction inputs were double-spent, this means the swap
31
+ * has failed and no BTC was sent
32
+ */
33
+ FAILED = -4,
34
+ /**
35
+ * The intermediary (LP) declined to co-sign the submitted PSBT, hence the swap failed
36
+ */
37
+ DECLINED = -3,
38
+ /**
39
+ * Swap has expired for good and there is no way how it can be executed anymore
40
+ */
41
+ QUOTE_EXPIRED = -2,
42
+ /**
43
+ * A swap is almost expired, and it should be presented to the user as expired, though
44
+ * there is still a chance that it will be processed
45
+ */
46
+ QUOTE_SOFT_EXPIRED = -1,
47
+ /**
48
+ * Swap was created, use the {@link SpvFromBTCSwap.getFundedPsbt} or {@link SpvFromBTCSwap.getPsbt} functions
49
+ * to get the bitcoin swap PSBT that should be signed by the user's wallet and then submitted via the
50
+ * {@link SpvFromBTCSwap.submitPsbt} function.
51
+ */
52
+ CREATED = 0,
53
+ /**
54
+ * Swap bitcoin PSBT was submitted by the client to the SDK
55
+ */
56
+ SIGNED = 1,
57
+ /**
58
+ * Swap bitcoin PSBT sent to the intermediary (LP), waiting for the intermediary co-sign
59
+ * it and broadcast. You can use the {@link SpvFromBTCSwap.waitTillClaimedOrFronted}
60
+ * function to wait till the intermediary broadcasts the transaction and the transaction
61
+ * confirms.
62
+ */
63
+ POSTED = 2,
64
+ /**
65
+ * Intermediary (LP) has co-signed and broadcasted the bitcoin transaction. You can use the
66
+ * {@link SpvFromBTCSwap.waitTillClaimedOrFronted} function to wait till the transaction
67
+ * confirms.
68
+ */
69
+ BROADCASTED = 3,
70
+ /**
71
+ * Settlement on the destination smart chain was fronted and funds were already received
72
+ * by the user, even before the final settlement.
73
+ */
74
+ FRONTED = 4,
75
+ /**
76
+ * Bitcoin transaction confirmed with necessary amount of confirmations, wait for automatic
77
+ * settlement by the watchtower with the {@link waitTillClaimedOrFronted} function, or settle manually
78
+ * using the {@link FromBTCSwap.claim} or {@link FromBTCSwap.txsClaim} function.
79
+ */
80
+ BTC_TX_CONFIRMED = 5,
81
+ /**
82
+ * Swap settled on the smart chain and funds received
83
+ */
84
+ CLAIMED = 6
85
+ }
86
+ export type SpvFromBTCSwapInit = ISwapInit & {
87
+ quoteId: string;
88
+ recipient: string;
89
+ vaultOwner: string;
90
+ vaultId: bigint;
91
+ vaultRequiredConfirmations: number;
92
+ vaultTokenMultipliers: bigint[];
93
+ vaultBtcAddress: string;
94
+ vaultUtxo: string;
95
+ vaultUtxoValue: bigint;
96
+ btcDestinationAddress: string;
97
+ btcAmount: bigint;
98
+ btcAmountSwap: bigint;
99
+ btcAmountGas: bigint;
100
+ minimumBtcFeeRate: number;
101
+ outputTotalSwap: bigint;
102
+ outputSwapToken: string;
103
+ outputTotalGas: bigint;
104
+ outputGasToken: string;
105
+ gasSwapFeeBtc: bigint;
106
+ gasSwapFee: bigint;
107
+ callerFeeShare: bigint;
108
+ frontingFeeShare: bigint;
109
+ executionFeeShare: bigint;
110
+ genesisSmartChainBlockHeight: number;
111
+ gasPricingInfo?: PriceInfoType;
112
+ };
113
+ export declare function isSpvFromBTCSwapInit(obj: any): obj is SpvFromBTCSwapInit;
114
+ /**
115
+ * New spv vault (UTXO-controlled vault) based swaps for Bitcoin -> Smart chain swaps not requiring
116
+ * any initiation on the destination chain, and with the added possibility for the user to receive
117
+ * a native token on the destination chain as part of the swap (a "gas drop" feature).
118
+ *
119
+ * @category Swaps/Bitcoin → Smart chain
120
+ */
121
+ export declare class SpvFromBTCSwap<T extends ChainType> extends ISwap<T, SpvFromBTCTypeDefinition<T>> implements IBTCWalletSwap, ISwapWithGasDrop<T>, IClaimableSwap<T, SpvFromBTCTypeDefinition<T>, SpvFromBTCSwapState> {
122
+ protected readonly currentVersion: number;
123
+ readonly TYPE: SwapType.SPV_VAULT_FROM_BTC;
124
+ /**
125
+ * @internal
126
+ */
127
+ protected readonly swapStateDescription: {
128
+ [-5]: string;
129
+ [-4]: string;
130
+ [-3]: string;
131
+ [-2]: string;
132
+ [-1]: string;
133
+ 0: string;
134
+ 1: string;
135
+ 2: string;
136
+ 3: string;
137
+ 4: string;
138
+ 5: string;
139
+ 6: string;
140
+ };
141
+ /**
142
+ * @internal
143
+ */
144
+ protected readonly swapStateName: (state: number) => string;
145
+ /**
146
+ * @inheritDoc
147
+ * @internal
148
+ */
149
+ protected readonly logger: LoggerType;
150
+ private readonly quoteId;
151
+ private readonly recipient;
152
+ private readonly vaultOwner;
153
+ private readonly vaultId;
154
+ private readonly vaultRequiredConfirmations;
155
+ private readonly vaultTokenMultipliers;
156
+ private readonly vaultBtcAddress;
157
+ private readonly vaultUtxo;
158
+ private readonly vaultUtxoValue;
159
+ private readonly btcDestinationAddress;
160
+ private readonly btcAmount;
161
+ private readonly btcAmountSwap;
162
+ private readonly btcAmountGas;
163
+ private readonly outputTotalSwap;
164
+ private readonly outputSwapToken;
165
+ private readonly outputTotalGas;
166
+ private readonly outputGasToken;
167
+ private readonly gasSwapFeeBtc;
168
+ private readonly gasSwapFee;
169
+ private readonly callerFeeShare;
170
+ private readonly frontingFeeShare;
171
+ private readonly executionFeeShare;
172
+ private readonly gasPricingInfo?;
173
+ private posted?;
174
+ /**
175
+ * @internal
176
+ */
177
+ readonly _genesisSmartChainBlockHeight: number;
178
+ /**
179
+ * @internal
180
+ */
181
+ _senderAddress?: string;
182
+ /**
183
+ * @internal
184
+ */
185
+ _claimTxId?: string;
186
+ /**
187
+ * @internal
188
+ */
189
+ _frontTxId?: string;
190
+ /**
191
+ * @internal
192
+ */
193
+ _data?: T["SpvVaultWithdrawalData"];
194
+ /**
195
+ * Minimum fee rate in sats/vB that the input bitcoin transaction needs to pay
196
+ */
197
+ readonly minimumBtcFeeRate: number;
198
+ /**
199
+ * Time at which the SDK realized the bitcoin transaction was confirmed
200
+ * @private
201
+ */
202
+ private btcTxConfirmedAt?;
203
+ private _contract;
204
+ constructor(wrapper: SpvFromBTCWrapper<T>, init: SpvFromBTCSwapInit);
205
+ constructor(wrapper: SpvFromBTCWrapper<T>, obj: any);
206
+ /**
207
+ * @inheritDoc
208
+ * @internal
209
+ */
210
+ protected upgradeVersion(): void;
211
+ /**
212
+ * @inheritDoc
213
+ * @internal
214
+ */
215
+ protected tryCalculateSwapFee(): void;
216
+ /**
217
+ * @inheritDoc
218
+ */
219
+ refreshPriceData(): Promise<void>;
220
+ /**
221
+ * @inheritDoc
222
+ * @internal
223
+ */
224
+ _getInitiator(): string;
225
+ /**
226
+ * @inheritDoc
227
+ * @internal
228
+ */
229
+ _getEscrowHash(): string | null;
230
+ /**
231
+ * @inheritDoc
232
+ */
233
+ getId(): string;
234
+ /**
235
+ * @inheritDoc
236
+ */
237
+ getQuoteExpiry(): number;
238
+ /**
239
+ * @inheritDoc
240
+ * @internal
241
+ */
242
+ _verifyQuoteDefinitelyExpired(): Promise<boolean>;
243
+ /**
244
+ * @inheritDoc
245
+ * @internal
246
+ */
247
+ _verifyQuoteValid(): Promise<boolean>;
248
+ /**
249
+ * @inheritDoc
250
+ */
251
+ getOutputAddress(): string | null;
252
+ /**
253
+ * @inheritDoc
254
+ */
255
+ getOutputTxId(): string | null;
256
+ /**
257
+ * @inheritDoc
258
+ */
259
+ getInputAddress(): string | null;
260
+ /**
261
+ * @inheritDoc
262
+ */
263
+ getInputTxId(): string | null;
264
+ /**
265
+ * @inheritDoc
266
+ */
267
+ requiresAction(): boolean;
268
+ /**
269
+ * @inheritDoc
270
+ */
271
+ isFinished(): boolean;
272
+ /**
273
+ * @inheritDoc
274
+ */
275
+ isClaimable(): boolean;
276
+ /**
277
+ * @inheritDoc
278
+ */
279
+ isSuccessful(): boolean;
280
+ /**
281
+ * @inheritDoc
282
+ */
283
+ isFailed(): boolean;
284
+ /**
285
+ * @inheritDoc
286
+ */
287
+ isInProgress(): boolean;
288
+ /**
289
+ * @inheritDoc
290
+ */
291
+ isQuoteExpired(): boolean;
292
+ /**
293
+ * @inheritDoc
294
+ */
295
+ isQuoteSoftExpired(): boolean;
296
+ /**
297
+ * Returns the data about used spv vault (UTXO-controlled vault) to perform the swap
298
+ */
299
+ getSpvVaultData(): {
300
+ owner: string;
301
+ vaultId: bigint;
302
+ utxo: string;
303
+ };
304
+ /**
305
+ * Returns the input BTC amount in sats without any fees
306
+ *
307
+ * @internal
308
+ */
309
+ protected getInputSwapAmountWithoutFee(): bigint;
310
+ /**
311
+ * Returns the input gas BTC amount in sats without any fees
312
+ *
313
+ * @internal
314
+ */
315
+ protected getInputGasAmountWithoutFee(): bigint;
316
+ /**
317
+ * Returns to total input BTC amount in sats without any fees (this is BTC amount for the swap + BTC amount
318
+ * for the gas drop).
319
+ *
320
+ * @internal
321
+ */
322
+ protected getInputAmountWithoutFee(): bigint;
323
+ /**
324
+ * Returns the swap output amount without any fees, this value is therefore always higher than
325
+ * the actual received output.
326
+ *
327
+ * @internal
328
+ */
329
+ protected getOutputWithoutFee(): TokenAmount<SCToken<T["ChainId"]>, true>;
330
+ /**
331
+ * Returns the swap fee charged by the intermediary (LP) on this swap
332
+ *
333
+ * @internal
334
+ */
335
+ protected getSwapFee(): Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
336
+ /**
337
+ * Returns the fee to be paid to watchtowers on the destination chain to automatically
338
+ * process and settle this swap without requiring any user interaction
339
+ *
340
+ * @internal
341
+ */
342
+ protected getWatchtowerFee(): Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
343
+ /**
344
+ * @inheritDoc
345
+ */
346
+ getFee(): Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
347
+ /**
348
+ * @inheritDoc
349
+ */
350
+ getFeeBreakdown(): [
351
+ {
352
+ type: FeeType.SWAP;
353
+ fee: Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
354
+ },
355
+ {
356
+ type: FeeType.NETWORK_OUTPUT;
357
+ fee: Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
358
+ }
359
+ ];
360
+ /**
361
+ * @inheritDoc
362
+ */
363
+ getOutputToken(): SCToken<T["ChainId"]>;
364
+ /**
365
+ * @inheritDoc
366
+ */
367
+ getOutput(): TokenAmount<SCToken<T["ChainId"]>, true>;
368
+ /**
369
+ * @inheritDoc
370
+ */
371
+ getGasDropOutput(): TokenAmount<SCToken<T["ChainId"]>, true>;
372
+ /**
373
+ * @inheritDoc
374
+ */
375
+ getInputWithoutFee(): TokenAmount<BtcToken<false>, true>;
376
+ /**
377
+ * @inheritDoc
378
+ */
379
+ getInputToken(): BtcToken<false>;
380
+ /**
381
+ * @inheritDoc
382
+ */
383
+ getInput(): TokenAmount<BtcToken<false>, true>;
384
+ /**
385
+ * @inheritDoc
386
+ */
387
+ getRequiredConfirmationsCount(): number;
388
+ /**
389
+ * Returns raw transaction details that can be used to manually create a swap PSBT. It is better to use
390
+ * the {@link getPsbt} or {@link getFundedPsbt} function retrieve an already prepared PSBT.
391
+ */
392
+ getTransactionDetails(): Promise<{
393
+ in0txid: string;
394
+ in0vout: number;
395
+ in0sequence: number;
396
+ vaultAmount: bigint;
397
+ vaultScript: Uint8Array;
398
+ in1sequence: number;
399
+ out1script: Uint8Array;
400
+ out2amount: bigint;
401
+ out2script: Uint8Array;
402
+ locktime: number;
403
+ }>;
404
+ /**
405
+ * Returns the raw PSBT (not funded), the wallet should fund the PSBT (add its inputs) and importantly **set the nSequence field of the
406
+ * 2nd input** (input 1 - indexing from 0) to the value returned in `in1sequence`, sign the PSBT and then pass
407
+ * it back to the swap with {@link submitPsbt} function.
408
+ */
409
+ getPsbt(): Promise<{
410
+ psbt: Transaction;
411
+ psbtHex: string;
412
+ psbtBase64: string;
413
+ in1sequence: number;
414
+ }>;
415
+ /**
416
+ * Returns the PSBT that is already funded with wallet's UTXOs (runs a coin-selection algorithm to choose UTXOs to use),
417
+ * also returns inputs indices that need to be signed by the wallet before submitting the PSBT back to the SDK with
418
+ * {@link submitPsbt}
419
+ *
420
+ * @remarks
421
+ * Note that when passing the `feeRate` argument, the fee must be at least {@link minimumBtcFeeRate} sats/vB.
422
+ *
423
+ * @param _bitcoinWallet Sender's bitcoin wallet
424
+ * @param feeRate Optional fee rate in sats/vB for the transaction
425
+ * @param additionalOutputs additional outputs to add to the PSBT - can be used to collect fees from users
426
+ * @param utxos Pre-fetched list of UTXOs to spend from
427
+ * @param spendFully Instructs the wallet to spend all the passed UTXOs in the transaction without creating any
428
+ * change output, if the `feeRate` is passed, it will also enforce that the feeRate in sats/vB for the resulting
429
+ * transaction is not more than 50% and 10 sats/vB larger (considering also the CPFP adjustments)
430
+ */
431
+ getFundedPsbt(_bitcoinWallet: IBitcoinWallet | MinimalBitcoinWalletInterface, feeRate?: number, additionalOutputs?: ({
432
+ amount: bigint;
433
+ outputScript: Uint8Array;
434
+ } | {
435
+ amount: bigint;
436
+ address: string;
437
+ })[], utxos?: BitcoinWalletUtxo[], spendFully?: boolean): Promise<{
438
+ psbt: Transaction;
439
+ psbtHex: string;
440
+ psbtBase64: string;
441
+ signInputs: number[];
442
+ }>;
443
+ /**
444
+ * @inheritDoc
445
+ */
446
+ submitPsbt(_psbt: Transaction | string): Promise<string>;
447
+ /**
448
+ * @inheritDoc
449
+ */
450
+ estimateBitcoinFee(_bitcoinWallet: IBitcoinWallet | MinimalBitcoinWalletInterface, feeRate?: number): Promise<TokenAmount<BtcToken<false>, true> | null>;
451
+ /**
452
+ * @inheritDoc
453
+ */
454
+ sendBitcoinTransaction(wallet: IBitcoinWallet | MinimalBitcoinWalletInterfaceWithSigner, feeRate?: number, utxos?: BitcoinWalletUtxo[], spendFully?: boolean): Promise<string>;
455
+ /**
456
+ * Executes the swap with the provided bitcoin wallet
457
+ *
458
+ * @param wallet Bitcoin wallet to use to sign the bitcoin transaction
459
+ * @param callbacks Callbacks to track the progress of the swap
460
+ * @param options Optional options for the swap like feeRate, AbortSignal, and timeouts/intervals
461
+ *
462
+ * @returns {boolean} Whether a swap was settled automatically by swap watchtowers or requires manual claim by the
463
+ * user, in case `false` is returned the user should call the {@link claim} function to settle the swap on the
464
+ * destination manually
465
+ */
466
+ execute(wallet: IBitcoinWallet | MinimalBitcoinWalletInterfaceWithSigner, callbacks?: {
467
+ onSourceTransactionSent?: (sourceTxId: string) => void;
468
+ onSourceTransactionConfirmationStatus?: (sourceTxId?: string, confirmations?: number, targetConfirations?: number, etaMs?: number) => void;
469
+ onSourceTransactionConfirmed?: (sourceTxId: string) => void;
470
+ onSwapSettled?: (destinationTxId: string) => void;
471
+ }, options?: {
472
+ feeRate?: number;
473
+ abortSignal?: AbortSignal;
474
+ btcTxCheckIntervalSeconds?: number;
475
+ maxWaitTillAutomaticSettlementSeconds?: number;
476
+ utxos?: BitcoinWalletUtxo[];
477
+ spendFully?: boolean;
478
+ }): Promise<boolean>;
479
+ /**
480
+ * @inheritDoc
481
+ *
482
+ * @param options.bitcoinFeeRate Optional fee rate to use for the created Bitcoin transaction
483
+ * @param options.bitcoinWallet Optional bitcoin wallet address specification to return a funded PSBT,
484
+ * if not provided a raw PSBT is returned instead which necessitates the implementor to manually add
485
+ * inputs to the bitcoin transaction and **set the nSequence field of the 2nd input** (input 1 -
486
+ * indexing from 0) to the value returned in `in1sequence`
487
+ */
488
+ txsExecute(options?: {
489
+ bitcoinFeeRate?: number;
490
+ bitcoinWallet?: MinimalBitcoinWalletInterface;
491
+ }): Promise<[
492
+ SwapExecutionActionBitcoin<"RAW_PSBT" | "FUNDED_PSBT">
493
+ ]>;
494
+ /**
495
+ * @inheritDoc
496
+ *
497
+ * @param options.bitcoinFeeRate Optional fee rate to use for the created Bitcoin transaction
498
+ * @param options.bitcoinWallet Optional bitcoin wallet address specification to return a funded PSBT,
499
+ * if not provided a raw PSBT is returned instead which necessitates the implementor to manually add
500
+ * inputs to the bitcoin transaction and **set the nSequence field of the 2nd input** (input 1 -
501
+ * indexing from 0) to the value returned in `in1sequence`
502
+ * @param options.manualSettlementSmartChainSigner Optional smart chain signer to create a manual claim (settlement) transaction
503
+ * @param options.maxWaitTillAutomaticSettlementSeconds Maximum time to wait for an automatic settlement after
504
+ * the bitcoin transaction is confirmed (defaults to 60 seconds)
505
+ */
506
+ getCurrentActions(options?: {
507
+ bitcoinFeeRate?: number;
508
+ bitcoinWallet?: MinimalBitcoinWalletInterface;
509
+ manualSettlementSmartChainSigner?: string | T["Signer"] | T["NativeSigner"];
510
+ maxWaitTillAutomaticSettlementSeconds?: number;
511
+ }): Promise<SwapExecutionAction<T>[]>;
512
+ /**
513
+ * Checks whether a bitcoin payment was already made, returns the payment or null when no payment has been made.
514
+ * @internal
515
+ */
516
+ protected getBitcoinPayment(): Promise<{
517
+ txId: string;
518
+ confirmations: number;
519
+ targetConfirmations: number;
520
+ inputAddresses?: string[];
521
+ } | null>;
522
+ /**
523
+ * @inheritDoc
524
+ *
525
+ * @throws {Error} if in invalid state (must be {@link SpvFromBTCSwapState.POSTED} or
526
+ * {@link SpvFromBTCSwapState.BROADCASTED} states)
527
+ */
528
+ waitForBitcoinTransaction(updateCallback?: (txId?: string, confirmations?: number, targetConfirmations?: number, txEtaMs?: number) => void, checkIntervalSeconds?: number, abortSignal?: AbortSignal): Promise<string>;
529
+ /**
530
+ * Returns transactions for settling (claiming) the swap if the swap requires manual settlement, you can check so
531
+ * with isClaimable. After sending the transaction manually be sure to call the waitTillClaimed function to wait
532
+ * till the claim transaction is observed, processed by the SDK and state of the swap properly updated.
533
+ *
534
+ * @remarks
535
+ * Might also return transactions necessary to sync the bitcoin light client.
536
+ *
537
+ * @param _signer Address of the signer to create the claim transactions for, can also be different to the recipient
538
+ *
539
+ * @throws {Error} If the swap is in invalid state (must be {@link SpvFromBTCSwapState.BTC_TX_CONFIRMED})
540
+ */
541
+ txsClaim(_signer?: string | T["Signer"] | T["NativeSigner"]): Promise<T["TX"][]>;
542
+ /**
543
+ * Settles the swap by claiming the funds on the destination chain if the swap requires manual settlement, you can
544
+ * check so with isClaimable.
545
+ *
546
+ * @remarks
547
+ * Might also sync the bitcoin light client during the process.
548
+ *
549
+ * @param _signer Signer to use for signing the settlement transactions, can also be different to the recipient
550
+ * @param abortSignal Abort signal
551
+ * @param onBeforeTxSent Optional callback triggered before the claim transaction is broadcasted
552
+ *
553
+ * @throws {Error} If the swap is in invalid state (must be {@link SpvFromBTCSwapState.BTC_TX_CONFIRMED})
554
+ */
555
+ claim(_signer: T["Signer"] | T["NativeSigner"], abortSignal?: AbortSignal, onBeforeTxSent?: (txId: string) => void): Promise<string>;
556
+ /**
557
+ * Periodically checks the chain to see whether the swap was finished (claimed or refunded)
558
+ *
559
+ * @param abortSignal
560
+ * @param interval How often to check (in seconds), default to 5s
561
+ * @internal
562
+ */
563
+ protected watchdogWaitTillResult(abortSignal?: AbortSignal, interval?: number): Promise<SpvWithdrawalClaimedState | SpvWithdrawalFrontedState | SpvWithdrawalClosedState>;
564
+ /**
565
+ * Waits till the swap is successfully settled (claimed), should be called after sending the claim (settlement)
566
+ * transactions manually to wait till the SDK processes the settlement and updates the swap state accordingly.
567
+ *
568
+ * @remarks
569
+ * This is an alias for the {@link waitTillClaimedOrFronted} function and will also resolve if the swap has
570
+ * been fronted (not necessarily claimed)
571
+ *
572
+ * @param maxWaitTimeSeconds – Maximum time in seconds to wait for the swap to be settled
573
+ * @param abortSignal AbortSignal
574
+ *
575
+ * @returns Whether the swap was claimed in time or not
576
+ */
577
+ waitTillClaimed(maxWaitTimeSeconds?: number, abortSignal?: AbortSignal): Promise<boolean>;
578
+ /**
579
+ * Waits till the swap is successfully fronted or settled on the destination chain
580
+ *
581
+ * @param maxWaitTimeSeconds Maximum time in seconds to wait for the swap to be settled (by default
582
+ * it waits indefinitely)
583
+ * @param abortSignal Abort signal
584
+ *
585
+ * @returns {boolean} whether the swap was claimed or fronted automatically or not, if the swap was not claimed
586
+ * the user can claim manually through the {@link claim} function
587
+ */
588
+ waitTillClaimedOrFronted(maxWaitTimeSeconds?: number, abortSignal?: AbortSignal): Promise<boolean>;
589
+ /**
590
+ * Waits till the bitcoin transaction confirms and swap settled on the destination chain
591
+ *
592
+ * @param updateCallback Callback called when txId is found, and also called with subsequent confirmations
593
+ * @param checkIntervalSeconds How often to check the bitcoin transaction (5 seconds by default)
594
+ * @param abortSignal Abort signal
595
+ *
596
+ * @throws {Error} if in invalid state (must be {@link SpvFromBTCSwapState.POSTED} or
597
+ * {@link SpvFromBTCSwapState.BROADCASTED} states)
598
+ */
599
+ waitTillExecuted(updateCallback?: (txId?: string, confirmations?: number, targetConfirmations?: number, txEtaMs?: number) => void, checkIntervalSeconds?: number, abortSignal?: AbortSignal): Promise<void>;
600
+ /**
601
+ * @inheritDoc
602
+ */
603
+ serialize(): any;
604
+ /**
605
+ * Used to set the txId of the bitcoin payment from the on-chain events listener
606
+ *
607
+ * @param txId
608
+ * @internal
609
+ */
610
+ _setBitcoinTxId(txId: string): Promise<void>;
611
+ private btcTxLastChecked?;
612
+ /**
613
+ * @internal
614
+ */
615
+ _syncStateFromBitcoin(save?: boolean): Promise<boolean>;
616
+ /**
617
+ * Checks the swap's state on-chain and compares it to its internal state, updates/changes it according to on-chain
618
+ * data
619
+ */
620
+ private syncStateFromChain;
621
+ /**
622
+ * @inheritDoc
623
+ * @internal
624
+ */
625
+ _sync(save?: boolean): Promise<boolean>;
626
+ /**
627
+ * @inheritDoc
628
+ * @internal
629
+ */
630
+ _tick(save?: boolean): Promise<boolean>;
631
+ /**
632
+ * Checks whether an on-chain withdrawal state should be fetched for this specific swap
633
+ *
634
+ * @internal
635
+ */
636
+ _shouldCheckWithdrawalState(frontingAddress?: string | null, vaultDataUtxo?: string | null): Promise<boolean>;
637
+ }