@atomiqlabs/sdk 8.6.6 → 8.6.8

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