@atomiqlabs/sdk 8.1.8 → 8.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +41 -5
  2. package/dist/bitcoin/wallet/BitcoinWallet.js +36 -1
  3. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +52 -2
  4. package/dist/bitcoin/wallet/IBitcoinWallet.js +2 -1
  5. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +42 -7
  6. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +36 -1
  7. package/dist/enums/FeeType.d.ts +7 -0
  8. package/dist/enums/FeeType.js +7 -0
  9. package/dist/enums/SwapAmountType.d.ts +7 -0
  10. package/dist/enums/SwapAmountType.js +7 -0
  11. package/dist/enums/SwapDirection.d.ts +7 -0
  12. package/dist/enums/SwapDirection.js +7 -0
  13. package/dist/enums/SwapType.d.ts +62 -1
  14. package/dist/enums/SwapType.js +62 -1
  15. package/dist/errors/IntermediaryError.d.ts +4 -0
  16. package/dist/errors/IntermediaryError.js +1 -0
  17. package/dist/errors/RequestError.d.ts +15 -1
  18. package/dist/errors/RequestError.js +8 -0
  19. package/dist/errors/UserError.d.ts +1 -0
  20. package/dist/errors/UserError.js +1 -0
  21. package/dist/index.d.ts +4 -5
  22. package/dist/index.js +3 -4
  23. package/dist/intermediaries/Intermediary.d.ts +57 -10
  24. package/dist/intermediaries/Intermediary.js +37 -10
  25. package/dist/intermediaries/IntermediaryDiscovery.d.ts +55 -22
  26. package/dist/intermediaries/IntermediaryDiscovery.js +35 -22
  27. package/dist/prices/RedundantSwapPrice.d.ts +24 -3
  28. package/dist/prices/RedundantSwapPrice.js +21 -1
  29. package/dist/prices/SingleSwapPrice.d.ts +9 -6
  30. package/dist/prices/SingleSwapPrice.js +10 -7
  31. package/dist/prices/SwapPriceWithChain.d.ts +54 -16
  32. package/dist/prices/SwapPriceWithChain.js +58 -20
  33. package/dist/prices/abstract/ISwapPrice.d.ts +94 -45
  34. package/dist/prices/abstract/ISwapPrice.js +103 -55
  35. package/dist/prices/providers/BinancePriceProvider.d.ts +7 -0
  36. package/dist/prices/providers/BinancePriceProvider.js +7 -0
  37. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +6 -0
  38. package/dist/prices/providers/CoinGeckoPriceProvider.js +6 -0
  39. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +6 -0
  40. package/dist/prices/providers/CoinPaprikaPriceProvider.js +6 -0
  41. package/dist/prices/providers/CustomPriceProvider.d.ts +11 -0
  42. package/dist/prices/providers/CustomPriceProvider.js +11 -0
  43. package/dist/prices/providers/KrakenPriceProvider.d.ts +9 -0
  44. package/dist/prices/providers/KrakenPriceProvider.js +9 -0
  45. package/dist/prices/providers/OKXPriceProvider.d.ts +6 -0
  46. package/dist/prices/providers/OKXPriceProvider.js +6 -0
  47. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +3 -0
  48. package/dist/prices/providers/abstract/ExchangePriceProvider.js +3 -0
  49. package/dist/storage/IUnifiedStorage.d.ts +19 -7
  50. package/dist/storage/UnifiedSwapStorage.d.ts +33 -3
  51. package/dist/storage/UnifiedSwapStorage.js +29 -1
  52. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +31 -7
  53. package/dist/storage-browser/IndexedDBUnifiedStorage.js +29 -6
  54. package/dist/storage-browser/LocalStorageManager.d.ts +25 -1
  55. package/dist/storage-browser/LocalStorageManager.js +25 -1
  56. package/dist/swapper/Swapper.d.ts +302 -221
  57. package/dist/swapper/Swapper.js +376 -344
  58. package/dist/swapper/SwapperFactory.d.ts +41 -17
  59. package/dist/swapper/SwapperFactory.js +23 -2
  60. package/dist/swapper/SwapperUtils.d.ts +75 -28
  61. package/dist/swapper/SwapperUtils.js +107 -60
  62. package/dist/swapper/SwapperWithChain.d.ts +286 -91
  63. package/dist/swapper/SwapperWithChain.js +218 -64
  64. package/dist/swapper/SwapperWithSigner.d.ts +229 -80
  65. package/dist/swapper/SwapperWithSigner.js +190 -44
  66. package/dist/swaps/IAddressSwap.d.ts +10 -1
  67. package/dist/swaps/IAddressSwap.js +2 -1
  68. package/dist/swaps/IBTCWalletSwap.d.ts +24 -6
  69. package/dist/swaps/IBTCWalletSwap.js +2 -1
  70. package/dist/swaps/IClaimableSwap.d.ts +36 -4
  71. package/dist/swaps/IClaimableSwap.js +2 -1
  72. package/dist/swaps/IClaimableSwapWrapper.d.ts +11 -1
  73. package/dist/swaps/IRefundableSwap.d.ts +29 -3
  74. package/dist/swaps/IRefundableSwap.js +2 -1
  75. package/dist/swaps/ISwap.d.ts +159 -21
  76. package/dist/swaps/ISwap.js +90 -33
  77. package/dist/swaps/ISwapWithGasDrop.d.ts +6 -0
  78. package/dist/swaps/ISwapWithGasDrop.js +1 -0
  79. package/dist/swaps/ISwapWrapper.d.ts +157 -48
  80. package/dist/swaps/ISwapWrapper.js +130 -72
  81. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +49 -6
  82. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +22 -12
  83. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +65 -12
  84. package/dist/swaps/escrow_swaps/IEscrowSwap.js +38 -19
  85. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +39 -9
  86. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +30 -21
  87. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +31 -15
  88. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +33 -18
  89. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +94 -29
  90. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +90 -27
  91. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +22 -9
  92. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +24 -11
  93. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +275 -58
  94. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +516 -239
  95. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +76 -25
  96. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +131 -49
  97. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +311 -51
  98. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +542 -193
  99. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +87 -26
  100. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +147 -58
  101. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +209 -53
  102. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +449 -242
  103. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +77 -23
  104. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +116 -46
  105. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +197 -56
  106. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +326 -189
  107. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +30 -5
  108. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +44 -19
  109. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +60 -19
  110. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +74 -31
  111. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +76 -50
  112. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +106 -101
  113. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +36 -13
  114. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +65 -19
  115. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +46 -17
  116. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +82 -27
  117. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +328 -92
  118. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +460 -219
  119. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +76 -24
  120. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +244 -124
  121. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +146 -18
  122. package/dist/swaps/trusted/ln/LnForGasSwap.js +173 -43
  123. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +29 -10
  124. package/dist/swaps/trusted/ln/LnForGasWrapper.js +30 -11
  125. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +200 -47
  126. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +230 -78
  127. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +34 -12
  128. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +33 -14
  129. package/dist/types/AmountData.d.ts +2 -1
  130. package/dist/types/CustomPriceFunction.d.ts +7 -1
  131. package/dist/types/SwapExecutionAction.d.ts +74 -4
  132. package/dist/types/SwapWithSigner.d.ts +4 -1
  133. package/dist/types/SwapWithSigner.js +5 -2
  134. package/dist/types/Token.d.ts +11 -5
  135. package/dist/types/Token.js +6 -3
  136. package/dist/types/TokenAmount.d.ts +3 -0
  137. package/dist/types/TokenAmount.js +2 -0
  138. package/dist/types/fees/Fee.d.ts +2 -1
  139. package/dist/types/fees/FeeBreakdown.d.ts +2 -1
  140. package/dist/types/fees/PercentagePPM.d.ts +2 -0
  141. package/dist/types/fees/PercentagePPM.js +1 -0
  142. package/dist/types/lnurl/LNURLPay.d.ts +14 -6
  143. package/dist/types/lnurl/LNURLPay.js +6 -2
  144. package/dist/types/lnurl/LNURLWithdraw.d.ts +12 -5
  145. package/dist/types/lnurl/LNURLWithdraw.js +6 -2
  146. package/dist/types/wallets/LightningInvoiceCreateService.d.ts +20 -0
  147. package/dist/types/wallets/LightningInvoiceCreateService.js +15 -0
  148. package/dist/types/wallets/MinimalBitcoinWalletInterface.d.ts +3 -1
  149. package/dist/types/wallets/MinimalLightningNetworkWalletInterface.d.ts +3 -1
  150. package/dist/utils/BitcoinUtils.d.ts +1 -0
  151. package/dist/utils/BitcoinUtils.js +5 -1
  152. package/dist/utils/SwapUtils.d.ts +56 -1
  153. package/dist/utils/SwapUtils.js +53 -1
  154. package/dist/utils/TokenUtils.d.ts +10 -2
  155. package/dist/utils/TokenUtils.js +12 -4
  156. package/package.json +3 -3
  157. package/src/bitcoin/wallet/BitcoinWallet.ts +41 -5
  158. package/src/bitcoin/wallet/IBitcoinWallet.ts +57 -2
  159. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +42 -6
  160. package/src/enums/FeeType.ts +7 -0
  161. package/src/enums/SwapAmountType.ts +7 -0
  162. package/src/enums/SwapDirection.ts +7 -0
  163. package/src/enums/SwapType.ts +62 -2
  164. package/src/errors/IntermediaryError.ts +4 -0
  165. package/src/errors/RequestError.ts +15 -1
  166. package/src/errors/UserError.ts +1 -0
  167. package/src/index.ts +6 -5
  168. package/src/intermediaries/Intermediary.ts +57 -10
  169. package/src/intermediaries/IntermediaryDiscovery.ts +60 -27
  170. package/src/prices/RedundantSwapPrice.ts +24 -4
  171. package/src/prices/SingleSwapPrice.ts +10 -7
  172. package/src/prices/SwapPriceWithChain.ts +59 -21
  173. package/src/prices/abstract/ISwapPrice.ts +114 -65
  174. package/src/prices/providers/BinancePriceProvider.ts +7 -0
  175. package/src/prices/providers/CoinGeckoPriceProvider.ts +6 -0
  176. package/src/prices/providers/CoinPaprikaPriceProvider.ts +6 -0
  177. package/src/prices/providers/CustomPriceProvider.ts +11 -0
  178. package/src/prices/providers/KrakenPriceProvider.ts +9 -0
  179. package/src/prices/providers/OKXPriceProvider.ts +6 -0
  180. package/src/prices/providers/abstract/ExchangePriceProvider.ts +3 -0
  181. package/src/storage/IUnifiedStorage.ts +19 -7
  182. package/src/storage/UnifiedSwapStorage.ts +33 -3
  183. package/src/storage-browser/IndexedDBUnifiedStorage.ts +31 -8
  184. package/src/storage-browser/LocalStorageManager.ts +25 -1
  185. package/src/swapper/Swapper.ts +512 -378
  186. package/src/swapper/SwapperFactory.ts +44 -21
  187. package/src/swapper/SwapperUtils.ts +107 -60
  188. package/src/swapper/SwapperWithChain.ts +320 -81
  189. package/src/swapper/SwapperWithSigner.ts +263 -56
  190. package/src/swaps/IAddressSwap.ts +11 -1
  191. package/src/swaps/IBTCWalletSwap.ts +24 -8
  192. package/src/swaps/IClaimableSwap.ts +39 -4
  193. package/src/swaps/IClaimableSwapWrapper.ts +11 -2
  194. package/src/swaps/IRefundableSwap.ts +32 -3
  195. package/src/swaps/ISwap.ts +221 -82
  196. package/src/swaps/ISwapWithGasDrop.ts +6 -0
  197. package/src/swaps/ISwapWrapper.ts +212 -94
  198. package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +62 -18
  199. package/src/swaps/escrow_swaps/IEscrowSwap.ts +83 -37
  200. package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +61 -30
  201. package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +37 -19
  202. package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +120 -51
  203. package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +24 -11
  204. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +559 -256
  205. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +155 -61
  206. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +590 -226
  207. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +177 -74
  208. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +470 -243
  209. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +141 -59
  210. package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +352 -193
  211. package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +48 -23
  212. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +86 -39
  213. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +110 -110
  214. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +88 -33
  215. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +101 -31
  216. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +534 -263
  217. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +289 -148
  218. package/src/swaps/trusted/ln/LnForGasSwap.ts +184 -45
  219. package/src/swaps/trusted/ln/LnForGasWrapper.ts +34 -15
  220. package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +260 -86
  221. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +41 -19
  222. package/src/types/AmountData.ts +2 -1
  223. package/src/types/CustomPriceFunction.ts +7 -1
  224. package/src/types/SwapExecutionAction.ts +84 -5
  225. package/src/types/SwapWithSigner.ts +7 -3
  226. package/src/types/Token.ts +12 -5
  227. package/src/types/TokenAmount.ts +3 -0
  228. package/src/types/fees/Fee.ts +2 -1
  229. package/src/types/fees/FeeBreakdown.ts +2 -1
  230. package/src/types/fees/PercentagePPM.ts +2 -0
  231. package/src/types/lnurl/LNURLPay.ts +14 -6
  232. package/src/types/lnurl/LNURLWithdraw.ts +12 -5
  233. package/src/types/wallets/LightningInvoiceCreateService.ts +26 -0
  234. package/src/types/wallets/MinimalBitcoinWalletInterface.ts +3 -1
  235. package/src/types/wallets/MinimalLightningNetworkWalletInterface.ts +3 -1
  236. package/src/utils/BitcoinUtils.ts +5 -0
  237. package/src/utils/SwapUtils.ts +61 -1
  238. package/src/utils/TokenUtils.ts +12 -4
  239. package/dist/bitcoin/BitcoinRpcWithAddressIndex.d.ts +0 -68
  240. package/dist/bitcoin/BitcoinRpcWithAddressIndex.js +0 -2
  241. package/dist/bitcoin/LightningNetworkApi.d.ts +0 -12
  242. package/dist/bitcoin/LightningNetworkApi.js +0 -2
  243. package/dist/bitcoin/mempool/MempoolApi.d.ts +0 -350
  244. package/dist/bitcoin/mempool/MempoolApi.js +0 -311
  245. package/dist/bitcoin/mempool/MempoolBitcoinBlock.d.ts +0 -44
  246. package/dist/bitcoin/mempool/MempoolBitcoinBlock.js +0 -48
  247. package/dist/bitcoin/mempool/MempoolBitcoinRpc.d.ts +0 -119
  248. package/dist/bitcoin/mempool/MempoolBitcoinRpc.js +0 -361
  249. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.d.ts +0 -22
  250. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.js +0 -105
  251. package/dist/errors/PaymentAuthError.d.ts +0 -11
  252. package/dist/errors/PaymentAuthError.js +0 -23
  253. package/src/errors/PaymentAuthError.ts +0 -26
@@ -6,45 +6,68 @@ import { TokenAmount } from "../../../../types/TokenAmount";
6
6
  import { BtcToken } from "../../../../types/Token";
7
7
  import { LoggerType } from "../../../../utils/Logger";
8
8
  export type ToBTCSwapInit<T extends SwapData> = IToBTCSwapInit<T> & {
9
- address: string;
10
- amount: bigint;
9
+ address?: string;
10
+ amount?: bigint;
11
11
  confirmationTarget: number;
12
12
  satsPerVByte: number;
13
- requiredConfirmations: number;
14
- nonce: bigint;
13
+ requiredConfirmations?: number;
14
+ nonce?: bigint;
15
15
  };
16
16
  export declare function isToBTCSwapInit<T extends SwapData>(obj: any): obj is ToBTCSwapInit<T>;
17
17
  /**
18
- * Smart Chain to on-chain BTC swap
18
+ * Escrow based (PrTLC) swap for Smart chains -> Bitcoin
19
+ *
19
20
  * @category Swaps
20
21
  */
21
22
  export declare class ToBTCSwap<T extends ChainType = ChainType> extends IToBTCSwap<T, ToBTCDefinition<T>> {
23
+ protected readonly TYPE: SwapType.TO_BTC;
24
+ /**
25
+ * @internal
26
+ */
22
27
  protected readonly outputToken: BtcToken<false>;
23
- protected readonly TYPE = SwapType.TO_BTC;
28
+ /**
29
+ * @internal
30
+ */
24
31
  protected readonly logger: LoggerType;
25
- private readonly address;
26
- private readonly amount;
32
+ private address?;
33
+ private amount?;
27
34
  private readonly confirmationTarget;
28
35
  private readonly satsPerVByte;
29
- private readonly requiredConfirmations;
30
- private readonly nonce;
36
+ private requiredConfirmations?;
37
+ private nonce?;
31
38
  private txId?;
32
39
  constructor(wrapper: ToBTCWrapper<T>, serializedObject: any);
33
40
  constructor(wrapper: ToBTCWrapper<T>, init: ToBTCSwapInit<T["Data"]>);
41
+ /**
42
+ * @inheritDoc
43
+ * @internal
44
+ */
34
45
  _setPaymentResult(result: {
35
46
  secret?: string;
36
47
  txId?: string;
37
48
  }, check?: boolean): Promise<boolean>;
49
+ /**
50
+ * @inheritDoc
51
+ */
38
52
  getOutputToken(): BtcToken<false>;
53
+ /**
54
+ * @inheritDoc
55
+ */
39
56
  getOutput(): TokenAmount<T["ChainId"], BtcToken<false>>;
40
57
  /**
41
- * Returns the bitcoin address where the BTC will be sent to
58
+ * @inheritDoc
59
+ */
60
+ getOutputAddress(): string | null;
61
+ /**
62
+ * @inheritDoc
42
63
  */
43
- getOutputAddress(): string;
44
64
  getOutputTxId(): string | null;
45
65
  /**
46
- * Returns fee rate of the bitcoin transaction in sats/vB
66
+ * Returns fee rate of the output bitcoin transaction in sats/vB as reported by the intermediary (LP)
47
67
  */
48
68
  getBitcoinFeeRate(): number;
69
+ /**
70
+ * @inheritDoc
71
+ */
49
72
  serialize(): any;
50
73
  }
@@ -9,18 +9,20 @@ const Utils_1 = require("../../../../utils/Utils");
9
9
  const TokenAmount_1 = require("../../../../types/TokenAmount");
10
10
  const Token_1 = require("../../../../types/Token");
11
11
  const Logger_1 = require("../../../../utils/Logger");
12
+ const BitcoinUtils_1 = require("../../../../utils/BitcoinUtils");
12
13
  function isToBTCSwapInit(obj) {
13
- return typeof (obj.address) === "string" &&
14
- typeof (obj.amount) === "bigint" &&
14
+ return (obj.address == null || typeof (obj.address) === "string") &&
15
+ (obj.amount == null || typeof (obj.amount) === "bigint") &&
15
16
  typeof (obj.confirmationTarget) === "number" &&
16
17
  typeof (obj.satsPerVByte) === "number" &&
17
- typeof (obj.requiredConfirmations) === "number" &&
18
- typeof (obj.nonce) === "bigint" &&
18
+ (obj.requiredConfirmations == null || typeof (obj.requiredConfirmations) === "number") &&
19
+ (obj.nonce == null || typeof (obj.nonce) === "bigint") &&
19
20
  (0, IToBTCSwap_1.isIToBTCSwapInit)(obj);
20
21
  }
21
22
  exports.isToBTCSwapInit = isToBTCSwapInit;
22
23
  /**
23
- * Smart Chain to on-chain BTC swap
24
+ * Escrow based (PrTLC) swap for Smart chains -> Bitcoin
25
+ *
24
26
  * @category Swaps
25
27
  */
26
28
  class ToBTCSwap extends IToBTCSwap_1.IToBTCSwap {
@@ -28,8 +30,11 @@ class ToBTCSwap extends IToBTCSwap_1.IToBTCSwap {
28
30
  if (isToBTCSwapInit(initOrObject) && initOrObject.url != null)
29
31
  initOrObject.url += "/tobtc";
30
32
  super(wrapper, initOrObject);
31
- this.outputToken = Token_1.BitcoinTokens.BTC;
32
33
  this.TYPE = SwapType_1.SwapType.TO_BTC;
34
+ /**
35
+ * @internal
36
+ */
37
+ this.outputToken = Token_1.BitcoinTokens.BTC;
33
38
  if (isToBTCSwapInit(initOrObject)) {
34
39
  this.address = initOrObject.address;
35
40
  this.amount = initOrObject.amount;
@@ -40,64 +45,105 @@ class ToBTCSwap extends IToBTCSwap_1.IToBTCSwap {
40
45
  }
41
46
  else {
42
47
  this.address = initOrObject.address;
43
- this.amount = BigInt(initOrObject.amount);
48
+ this.amount = (0, Utils_1.toBigInt)(initOrObject.amount);
44
49
  this.confirmationTarget = initOrObject.confirmationTarget;
45
50
  this.satsPerVByte = initOrObject.satsPerVByte;
46
51
  this.txId = initOrObject.txId;
47
- this.requiredConfirmations = initOrObject.requiredConfirmations ?? this.data.getConfirmationsHint();
48
- this.nonce = (0, Utils_1.toBigInt)(initOrObject.nonce) ?? this.data.getNonceHint();
52
+ this.requiredConfirmations = initOrObject.requiredConfirmations ?? this._data.getConfirmationsHint();
53
+ this.nonce = (0, Utils_1.toBigInt)(initOrObject.nonce) ?? this._data.getNonceHint();
49
54
  }
50
55
  this.logger = (0, Logger_1.getLogger)("ToBTC(" + this.getIdentifierHashString() + "): ");
51
56
  this.tryRecomputeSwapPrice();
52
57
  }
58
+ /**
59
+ * @inheritDoc
60
+ * @internal
61
+ */
53
62
  async _setPaymentResult(result, check = false) {
54
63
  if (result == null)
55
64
  return false;
56
65
  if (result.txId == null)
57
66
  throw new IntermediaryError_1.IntermediaryError("No btc txId returned!");
58
- if (check) {
59
- const btcTx = await this.wrapper.btcRpc.getTransaction(result.txId);
67
+ if (check || this.address == null || this.amount == null || this.nonce == null || this.requiredConfirmations == null) {
68
+ const btcTx = await this.wrapper._btcRpc.getTransaction(result.txId);
60
69
  if (btcTx == null)
61
70
  return false;
62
- const foundVout = btcTx.outs.find(vout => this.data.getClaimHash() === this.wrapper.contract.getHashForOnchain(buffer_1.Buffer.from(vout.scriptPubKey.hex, "hex"), BigInt(vout.value), this.requiredConfirmations, this.nonce).toString("hex"));
63
- if (foundVout == null)
64
- throw new IntermediaryError_1.IntermediaryError("Invalid btc txId returned");
71
+ //Extract nonce from tx
72
+ const nonce = this.nonce ?? (BigInt(btcTx.ins[0].sequence) & 0x00ffffffn) | (BigInt(btcTx.locktime - 500000000) << 24n);
73
+ let requiredConfirmations = this.requiredConfirmations;
74
+ const foundVout = btcTx.outs.find(vout => {
75
+ if (requiredConfirmations != null) {
76
+ return this._data.getClaimHash() === this.wrapper._contract.getHashForOnchain(buffer_1.Buffer.from(vout.scriptPubKey.hex, "hex"), BigInt(vout.value), requiredConfirmations, nonce).toString("hex");
77
+ }
78
+ else {
79
+ for (let i = 1; i <= 20; i++) {
80
+ if (this._data.getClaimHash() === this.wrapper._contract.getHashForOnchain(buffer_1.Buffer.from(vout.scriptPubKey.hex, "hex"), BigInt(vout.value), i, nonce).toString("hex")) {
81
+ requiredConfirmations = i;
82
+ return true;
83
+ }
84
+ }
85
+ }
86
+ });
87
+ if (requiredConfirmations == null)
88
+ this.logger.warn(`_setPaymentResult(): Tried to recover data from bitcoin transaction ${result.txId} data, but wasn't able to!`);
89
+ if (foundVout != null) {
90
+ this.nonce = nonce;
91
+ this.address = (0, BitcoinUtils_1.fromOutputScript)(this.wrapper._options.bitcoinNetwork, foundVout.scriptPubKey.hex);
92
+ this.amount = BigInt(foundVout.value);
93
+ this.requiredConfirmations = requiredConfirmations;
94
+ }
95
+ else {
96
+ if (check)
97
+ throw new IntermediaryError_1.IntermediaryError("Invalid btc txId returned");
98
+ }
65
99
  }
66
100
  this.txId = result.txId;
67
101
  return true;
68
102
  }
69
103
  //////////////////////////////
70
104
  //// Amounts & fees
105
+ /**
106
+ * @inheritDoc
107
+ */
71
108
  getOutputToken() {
72
109
  return Token_1.BitcoinTokens.BTC;
73
110
  }
111
+ /**
112
+ * @inheritDoc
113
+ */
74
114
  getOutput() {
75
- return (0, TokenAmount_1.toTokenAmount)(this.amount, this.outputToken, this.wrapper.prices, this.pricingInfo);
115
+ return (0, TokenAmount_1.toTokenAmount)(this.amount ?? null, this.outputToken, this.wrapper._prices, this.pricingInfo);
76
116
  }
77
117
  //////////////////////////////
78
118
  //// Getters & utils
79
119
  /**
80
- * Returns the bitcoin address where the BTC will be sent to
120
+ * @inheritDoc
81
121
  */
82
122
  getOutputAddress() {
83
- return this.address;
123
+ return this.address ?? null;
84
124
  }
125
+ /**
126
+ * @inheritDoc
127
+ */
85
128
  getOutputTxId() {
86
129
  return this.txId ?? null;
87
130
  }
88
131
  /**
89
- * Returns fee rate of the bitcoin transaction in sats/vB
132
+ * Returns fee rate of the output bitcoin transaction in sats/vB as reported by the intermediary (LP)
90
133
  */
91
134
  getBitcoinFeeRate() {
92
135
  return this.satsPerVByte;
93
136
  }
94
137
  //////////////////////////////
95
138
  //// Storage
139
+ /**
140
+ * @inheritDoc
141
+ */
96
142
  serialize() {
97
143
  return {
98
144
  ...super.serialize(),
99
145
  address: this.address,
100
- amount: this.amount.toString(10),
146
+ amount: this.amount == null ? null : this.amount.toString(10),
101
147
  confirmationTarget: this.confirmationTarget,
102
148
  satsPerVByte: this.satsPerVByte,
103
149
  nonce: this.nonce == null ? null : this.nonce.toString(10),
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  import { ToBTCSwap } from "./ToBTCSwap";
3
3
  import { IToBTCDefinition, IToBTCWrapper } from "../IToBTCWrapper";
4
- import { BitcoinRpc, ChainType } from "@atomiqlabs/base";
4
+ import { BitcoinRpc, ChainType, SwapCommitState } from "@atomiqlabs/base";
5
5
  import { Intermediary } from "../../../../intermediaries/Intermediary";
6
6
  import { ISwapPrice } from "../../../../prices/abstract/ISwapPrice";
7
7
  import { EventEmitter } from "events";
@@ -26,10 +26,21 @@ export type ToBTCWrapperOptions = ISwapWrapperOptions & {
26
26
  maxExpectedOnchainSendGracePeriodBlocks: number;
27
27
  };
28
28
  export type ToBTCDefinition<T extends ChainType> = IToBTCDefinition<T, ToBTCWrapper<T>, ToBTCSwap<T>>;
29
+ /**
30
+ * Escrow based (PrTLC) swap for Smart chains -> Bitcoin
31
+ *
32
+ * @category Swaps
33
+ */
29
34
  export declare class ToBTCWrapper<T extends ChainType> extends IToBTCWrapper<T, ToBTCDefinition<T>, ToBTCWrapperOptions> {
30
- readonly TYPE = SwapType.TO_BTC;
31
- readonly swapDeserializer: typeof ToBTCSwap;
32
- readonly btcRpc: BitcoinRpc<any>;
35
+ readonly TYPE: SwapType.TO_BTC;
36
+ /**
37
+ * @internal
38
+ */
39
+ readonly _swapDeserializer: typeof ToBTCSwap;
40
+ /**
41
+ * @internal
42
+ */
43
+ readonly _btcRpc: BitcoinRpc<any>;
33
44
  /**
34
45
  * @param chainIdentifier
35
46
  * @param unifiedStorage Storage interface for the current environment
@@ -47,18 +58,22 @@ export declare class ToBTCWrapper<T extends ChainType> extends IToBTCWrapper<T,
47
58
  swapState: [ISwap];
48
59
  }>);
49
60
  /**
50
- * Returns randomly generated random escrow nonce to be used for to BTC on-chain swaps
51
- * @private
61
+ * Returns randomly generated random bitcoin transaction nonce to be used for BTC on-chain swaps
62
+ *
52
63
  * @returns Escrow nonce
64
+ *
65
+ * @private
53
66
  */
54
67
  private getRandomNonce;
55
68
  /**
56
69
  * Converts bitcoin address to its corresponding output script
57
70
  *
58
71
  * @param addr Bitcoin address to get the output script for
59
- * @private
72
+ *
60
73
  * @returns Output script as Buffer
61
74
  * @throws {UserError} if invalid address is specified
75
+ *
76
+ * @private
62
77
  */
63
78
  private btcAddressToOutputScript;
64
79
  /**
@@ -71,23 +86,37 @@ export declare class ToBTCWrapper<T extends ChainType> extends IToBTCWrapper<T,
71
86
  * @param options Options as passed to the swap create function
72
87
  * @param data LP's returned parsed swap data
73
88
  * @param hash Payment hash of the swap
74
- * @private
89
+ *
75
90
  * @throws {IntermediaryError} if returned data are not correct
91
+ *
92
+ * @private
76
93
  */
77
94
  private verifyReturnedData;
78
95
  /**
79
- * Returns quotes fetched from LPs, paying to an 'address' - a bitcoin address
96
+ * Returns a newly created Smart chain -> Bitcoin swap using the PrTLC based escrow swap protocol,
97
+ * with the passed amount.
80
98
  *
81
- * @param signer Smart-chain signer address initiating the swap
82
- * @param address Bitcoin on-chain address you wish to pay to
83
- * @param amountData Amount of token & amount to swap
84
- * @param lps LPs (liquidity providers) to get the quotes from
85
- * @param options Quote options
86
- * @param additionalParams Additional parameters sent to the LP when creating the swap
87
- * @param abortSignal Abort signal for aborting the process
99
+ * @param signer Source chain signer address initiating the swap
100
+ * @param recipient Recipient bitcoin on-chain address
101
+ * @param amountData Amount, token and exact input/output data for to swap
102
+ * @param lps An array of intermediaries (LPs) to get the quotes from
103
+ * @param options Optional additional quote options
104
+ * @param additionalParams Optional additional parameters sent to the LP when creating the swap
105
+ * @param abortSignal Abort signal
88
106
  */
89
- create(signer: string, address: string, amountData: AmountData, lps: Intermediary[], options?: ToBTCOptions, additionalParams?: Record<string, any>, abortSignal?: AbortSignal): {
107
+ create(signer: string, recipient: string, amountData: AmountData, lps: Intermediary[], options?: ToBTCOptions, additionalParams?: Record<string, any>, abortSignal?: AbortSignal): {
90
108
  quote: Promise<ToBTCSwap<T>>;
91
109
  intermediary: Intermediary;
92
110
  }[];
111
+ /**
112
+ * @inheritDoc
113
+ */
114
+ recoverFromSwapDataAndState(init: {
115
+ data: T["Data"];
116
+ getInitTxId: () => Promise<string>;
117
+ getTxBlock: () => Promise<{
118
+ blockTime: number;
119
+ blockHeight: number;
120
+ }>;
121
+ }, state: SwapCommitState, lp?: Intermediary): Promise<ToBTCSwap<T> | null>;
93
122
  }
@@ -13,6 +13,12 @@ const IntermediaryAPI_1 = require("../../../../intermediaries/apis/IntermediaryA
13
13
  const RequestError_1 = require("../../../../errors/RequestError");
14
14
  const utils_1 = require("@scure/btc-signer/utils");
15
15
  const RetryUtils_1 = require("../../../../utils/RetryUtils");
16
+ const IToBTCSwap_1 = require("../IToBTCSwap");
17
+ /**
18
+ * Escrow based (PrTLC) swap for Smart chains -> Bitcoin
19
+ *
20
+ * @category Swaps
21
+ */
16
22
  class ToBTCWrapper extends IToBTCWrapper_1.IToBTCWrapper {
17
23
  /**
18
24
  * @param chainIdentifier
@@ -37,13 +43,18 @@ class ToBTCWrapper extends IToBTCWrapper_1.IToBTCWrapper {
37
43
  maxExpectedOnchainSendGracePeriodBlocks: options?.maxExpectedOnchainSendGracePeriodBlocks ?? 12,
38
44
  }, events);
39
45
  this.TYPE = SwapType_1.SwapType.TO_BTC;
40
- this.swapDeserializer = ToBTCSwap_1.ToBTCSwap;
41
- this.btcRpc = btcRpc;
46
+ /**
47
+ * @internal
48
+ */
49
+ this._swapDeserializer = ToBTCSwap_1.ToBTCSwap;
50
+ this._btcRpc = btcRpc;
42
51
  }
43
52
  /**
44
- * Returns randomly generated random escrow nonce to be used for to BTC on-chain swaps
45
- * @private
53
+ * Returns randomly generated random bitcoin transaction nonce to be used for BTC on-chain swaps
54
+ *
46
55
  * @returns Escrow nonce
56
+ *
57
+ * @private
47
58
  */
48
59
  getRandomNonce() {
49
60
  const firstPart = BigInt(Math.floor((Date.now() / 1000)) - 700000000);
@@ -53,13 +64,15 @@ class ToBTCWrapper extends IToBTCWrapper_1.IToBTCWrapper {
53
64
  * Converts bitcoin address to its corresponding output script
54
65
  *
55
66
  * @param addr Bitcoin address to get the output script for
56
- * @private
67
+ *
57
68
  * @returns Output script as Buffer
58
69
  * @throws {UserError} if invalid address is specified
70
+ *
71
+ * @private
59
72
  */
60
73
  btcAddressToOutputScript(addr) {
61
74
  try {
62
- return (0, BitcoinUtils_1.toOutputScript)(this.options.bitcoinNetwork, addr);
75
+ return (0, BitcoinUtils_1.toOutputScript)(this._options.bitcoinNetwork, addr);
63
76
  }
64
77
  catch (e) {
65
78
  throw new UserError_1.UserError("Invalid address specified");
@@ -75,8 +88,10 @@ class ToBTCWrapper extends IToBTCWrapper_1.IToBTCWrapper {
75
88
  * @param options Options as passed to the swap create function
76
89
  * @param data LP's returned parsed swap data
77
90
  * @param hash Payment hash of the swap
78
- * @private
91
+ *
79
92
  * @throws {IntermediaryError} if returned data are not correct
93
+ *
94
+ * @private
80
95
  */
81
96
  verifyReturnedData(signer, resp, amountData, lp, options, data, hash) {
82
97
  if (resp.totalFee !== (resp.swapFee + resp.networkFee))
@@ -91,10 +106,10 @@ class ToBTCWrapper extends IToBTCWrapper_1.IToBTCWrapper {
91
106
  }
92
107
  const maxAllowedBlockDelta = BigInt(options.confirmations +
93
108
  options.confirmationTarget +
94
- this.options.maxExpectedOnchainSendGracePeriodBlocks);
109
+ this._options.maxExpectedOnchainSendGracePeriodBlocks);
95
110
  const maxAllowedExpiryDelta = maxAllowedBlockDelta
96
- * BigInt(this.options.maxExpectedOnchainSendSafetyFactor)
97
- * BigInt(this.options.bitcoinBlocktime);
111
+ * BigInt(this._options.maxExpectedOnchainSendSafetyFactor)
112
+ * BigInt(this._options.bitcoinBlocktime);
98
113
  const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));
99
114
  const maxAllowedExpiryTimestamp = currentTimestamp + maxAllowedExpiryDelta;
100
115
  if (data.getExpiry() > maxAllowedExpiryTimestamp) {
@@ -112,17 +127,18 @@ class ToBTCWrapper extends IToBTCWrapper_1.IToBTCWrapper {
112
127
  }
113
128
  }
114
129
  /**
115
- * Returns quotes fetched from LPs, paying to an 'address' - a bitcoin address
130
+ * Returns a newly created Smart chain -> Bitcoin swap using the PrTLC based escrow swap protocol,
131
+ * with the passed amount.
116
132
  *
117
- * @param signer Smart-chain signer address initiating the swap
118
- * @param address Bitcoin on-chain address you wish to pay to
119
- * @param amountData Amount of token & amount to swap
120
- * @param lps LPs (liquidity providers) to get the quotes from
121
- * @param options Quote options
122
- * @param additionalParams Additional parameters sent to the LP when creating the swap
123
- * @param abortSignal Abort signal for aborting the process
133
+ * @param signer Source chain signer address initiating the swap
134
+ * @param recipient Recipient bitcoin on-chain address
135
+ * @param amountData Amount, token and exact input/output data for to swap
136
+ * @param lps An array of intermediaries (LPs) to get the quotes from
137
+ * @param options Optional additional quote options
138
+ * @param additionalParams Optional additional parameters sent to the LP when creating the swap
139
+ * @param abortSignal Abort signal
124
140
  */
125
- create(signer, address, amountData, lps, options, additionalParams, abortSignal) {
141
+ create(signer, recipient, amountData, lps, options, additionalParams, abortSignal) {
126
142
  if (!this.isInitialized)
127
143
  throw new Error("Not initialized, call init() first!");
128
144
  const _options = {
@@ -130,15 +146,15 @@ class ToBTCWrapper extends IToBTCWrapper_1.IToBTCWrapper {
130
146
  confirmations: options?.confirmations ?? 2
131
147
  };
132
148
  const nonce = this.getRandomNonce();
133
- const outputScript = this.btcAddressToOutputScript(address);
149
+ const outputScript = this.btcAddressToOutputScript(recipient);
134
150
  const _hash = !amountData.exactIn ?
135
- this.contract.getHashForOnchain(outputScript, amountData.amount, _options.confirmations, nonce).toString("hex") :
151
+ this._contract.getHashForOnchain(outputScript, amountData.amount, _options.confirmations, nonce).toString("hex") :
136
152
  undefined;
137
153
  const _abortController = (0, Utils_1.extendAbortController)(abortSignal);
138
154
  const pricePreFetchPromise = this.preFetchPrice(amountData, _abortController.signal);
139
155
  const usdPricePrefetchPromise = this.preFetchUsdPrice(_abortController.signal);
140
156
  const feeRatePromise = this.preFetchFeeRate(signer, amountData, _hash, _abortController);
141
- const _signDataPromise = this.contract.preFetchBlockDataForSignatures == null ?
157
+ const _signDataPromise = this._contract.preFetchBlockDataForSignatures == null ?
142
158
  this.preFetchSignData(Promise.resolve(true)) :
143
159
  undefined;
144
160
  return lps.map(lp => {
@@ -152,7 +168,7 @@ class ToBTCWrapper extends IToBTCWrapper_1.IToBTCWrapper {
152
168
  try {
153
169
  const { signDataPromise, resp } = await (0, RetryUtils_1.tryWithRetries)(async (retryCount) => {
154
170
  const { signDataPrefetch, response } = IntermediaryAPI_1.IntermediaryAPI.initToBTC(this.chainIdentifier, lp.url, {
155
- btcAddress: address,
171
+ btcAddress: recipient,
156
172
  amount: amountData.amount,
157
173
  confirmationTarget: _options.confirmationTarget,
158
174
  confirmations: _options.confirmations,
@@ -162,14 +178,14 @@ class ToBTCWrapper extends IToBTCWrapper_1.IToBTCWrapper {
162
178
  exactIn: amountData.exactIn,
163
179
  feeRate: (0, Utils_1.throwIfUndefined)(feeRatePromise),
164
180
  additionalParams
165
- }, this.options.postRequestTimeout, abortController.signal, retryCount > 0 ? false : undefined);
181
+ }, this._options.postRequestTimeout, abortController.signal, retryCount > 0 ? false : undefined);
166
182
  return {
167
183
  signDataPromise: _signDataPromise ?? this.preFetchSignData(signDataPrefetch),
168
184
  resp: await response
169
185
  };
170
186
  }, undefined, RequestError_1.RequestError, abortController.signal);
171
- let hash = _hash ?? this.contract.getHashForOnchain(outputScript, resp.amount, _options.confirmations, nonce).toString("hex");
172
- const data = new this.swapDataDeserializer(resp.data);
187
+ let hash = _hash ?? this._contract.getHashForOnchain(outputScript, resp.amount, _options.confirmations, nonce).toString("hex");
188
+ const data = new this._swapDataDeserializer(resp.data);
173
189
  data.setOfferer(signer);
174
190
  this.verifyReturnedData(signer, resp, amountData, lp, _options, data, hash);
175
191
  const [pricingInfo, signatureExpiry, reputation] = await Promise.all([
@@ -194,7 +210,7 @@ class ToBTCWrapper extends IToBTCWrapper_1.IToBTCWrapper {
194
210
  data,
195
211
  networkFee: resp.networkFee,
196
212
  networkFeeBtc,
197
- address,
213
+ address: recipient,
198
214
  amount: resp.amount,
199
215
  confirmationTarget: _options.confirmationTarget,
200
216
  satsPerVByte: Number(resp.satsPervByte),
@@ -213,5 +229,44 @@ class ToBTCWrapper extends IToBTCWrapper_1.IToBTCWrapper {
213
229
  };
214
230
  });
215
231
  }
232
+ /**
233
+ * @inheritDoc
234
+ */
235
+ async recoverFromSwapDataAndState(init, state, lp) {
236
+ const data = init.data;
237
+ const swapInit = {
238
+ pricingInfo: {
239
+ isValid: true,
240
+ satsBaseFee: 0n,
241
+ swapPriceUSatPerToken: 100000000000000n,
242
+ realPriceUSatPerToken: 100000000000000n,
243
+ differencePPM: 0n,
244
+ feePPM: 0n,
245
+ },
246
+ url: lp?.url,
247
+ expiry: 0,
248
+ swapFee: 0n,
249
+ swapFeeBtc: 0n,
250
+ confirmationTarget: 1,
251
+ satsPerVByte: 0,
252
+ feeRate: "",
253
+ signatureData: undefined,
254
+ nonce: data.getNonceHint() ?? undefined,
255
+ requiredConfirmations: data.getConfirmationsHint() ?? undefined,
256
+ data,
257
+ networkFee: 0n,
258
+ networkFeeBtc: 0n,
259
+ exactIn: true
260
+ };
261
+ const swap = new ToBTCSwap_1.ToBTCSwap(this, swapInit);
262
+ swap._commitTxId = await init.getInitTxId();
263
+ const blockData = await init.getTxBlock();
264
+ swap.createdAt = blockData.blockTime * 1000;
265
+ swap._setInitiated();
266
+ swap._state = IToBTCSwap_1.ToBTCSwapState.COMMITED;
267
+ await swap._sync(false, false, state);
268
+ await swap._save();
269
+ return swap;
270
+ }
216
271
  }
217
272
  exports.ToBTCWrapper = ToBTCWrapper;