@atomiqlabs/sdk 8.1.7 → 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 +303 -222
  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 +513 -379
  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
@@ -5,7 +5,7 @@ import {
5
5
  ChainType,
6
6
  ClaimEvent,
7
7
  InitializeEvent, LightningNetworkApi,
8
- RefundEvent
8
+ RefundEvent, SwapCommitState, SwapCommitStateType
9
9
  } from "@atomiqlabs/base";
10
10
  import {Intermediary} from "../../../../intermediaries/Intermediary";
11
11
  import {Buffer} from "buffer";
@@ -29,7 +29,8 @@ import {IClaimableSwapWrapper} from "../../../IClaimableSwapWrapper";
29
29
  import {AmountData} from "../../../../types/AmountData";
30
30
  import {LNURLWithdrawParamsWithUrl} from "../../../../types/lnurl/LNURLWithdraw";
31
31
  import {tryWithRetries} from "../../../../utils/RetryUtils";
32
- import {AllOptional, AllRequired} from "../../../../utils/TypeUtils";
32
+ import {AllOptional} from "../../../../utils/TypeUtils";
33
+ import {sha256} from "@noble/hashes/sha2";
33
34
 
34
35
  export type FromBTCLNOptions = {
35
36
  descriptionHash?: Buffer,
@@ -45,16 +46,44 @@ export type FromBTCLNWrapperOptions = ISwapWrapperOptions & {
45
46
  export type FromBTCLNDefinition<T extends ChainType> = IFromBTCLNDefinition<T, FromBTCLNWrapper<T>, FromBTCLNSwap<T>>;
46
47
 
47
48
  /**
48
- * Factory wrapper for creating Lightning BTC to Smart Chain swaps
49
+ * Legacy escrow (HTLC) based swap for Bitcoin Lightning -> Smart chains, requires manual settlement
50
+ * of the swap on the destination network once the lightning network payment is received by the LP.
51
+ *
49
52
  * @category Swaps
50
53
  */
51
54
  export class FromBTCLNWrapper<
52
55
  T extends ChainType
53
56
  > extends IFromBTCLNWrapper<T, FromBTCLNDefinition<T>, FromBTCLNWrapperOptions> implements IClaimableSwapWrapper<FromBTCLNSwap<T>> {
54
57
 
55
- public readonly claimableSwapStates = [FromBTCLNSwapState.CLAIM_COMMITED];
56
- public readonly TYPE = SwapType.FROM_BTCLN;
57
- public readonly swapDeserializer = FromBTCLNSwap;
58
+ public readonly TYPE: SwapType.FROM_BTCLN = SwapType.FROM_BTCLN;
59
+
60
+ /**
61
+ * @internal
62
+ */
63
+ protected readonly tickSwapState = [
64
+ FromBTCLNSwapState.PR_CREATED,
65
+ FromBTCLNSwapState.PR_PAID,
66
+ FromBTCLNSwapState.CLAIM_COMMITED
67
+ ];
68
+
69
+ /**
70
+ * @internal
71
+ */
72
+ readonly _pendingSwapStates = [
73
+ FromBTCLNSwapState.PR_CREATED,
74
+ FromBTCLNSwapState.QUOTE_SOFT_EXPIRED,
75
+ FromBTCLNSwapState.PR_PAID,
76
+ FromBTCLNSwapState.CLAIM_COMMITED,
77
+ FromBTCLNSwapState.EXPIRED
78
+ ];
79
+ /**
80
+ * @internal
81
+ */
82
+ readonly _claimableSwapStates = [FromBTCLNSwapState.CLAIM_COMMITED];
83
+ /**
84
+ * @internal
85
+ */
86
+ readonly _swapDeserializer = FromBTCLNSwap;
58
87
 
59
88
  /**
60
89
  * @param chainIdentifier
@@ -93,38 +122,38 @@ export class FromBTCLNWrapper<
93
122
  );
94
123
  }
95
124
 
96
- public readonly pendingSwapStates = [
97
- FromBTCLNSwapState.PR_CREATED,
98
- FromBTCLNSwapState.QUOTE_SOFT_EXPIRED,
99
- FromBTCLNSwapState.PR_PAID,
100
- FromBTCLNSwapState.CLAIM_COMMITED,
101
- FromBTCLNSwapState.EXPIRED
102
- ];
103
- public readonly tickSwapState = [
104
- FromBTCLNSwapState.PR_CREATED,
105
- FromBTCLNSwapState.PR_PAID,
106
- FromBTCLNSwapState.CLAIM_COMMITED
107
- ];
108
-
125
+ /**
126
+ * @inheritDoc
127
+ * @internal
128
+ */
109
129
  protected processEventInitialize(swap: FromBTCLNSwap<T>, event: InitializeEvent<T["Data"]>): Promise<boolean> {
110
- if(swap.state===FromBTCLNSwapState.PR_PAID || swap.state===FromBTCLNSwapState.QUOTE_SOFT_EXPIRED) {
111
- swap.state = FromBTCLNSwapState.CLAIM_COMMITED;
130
+ if(swap._state===FromBTCLNSwapState.PR_PAID || swap._state===FromBTCLNSwapState.QUOTE_SOFT_EXPIRED) {
131
+ swap._state = FromBTCLNSwapState.CLAIM_COMMITED;
112
132
  return Promise.resolve(true);
113
133
  }
114
134
  return Promise.resolve(false);
115
135
  }
116
136
 
137
+ /**
138
+ * @inheritDoc
139
+ * @internal
140
+ */
117
141
  protected processEventClaim(swap: FromBTCLNSwap<T>, event: ClaimEvent<T["Data"]>): Promise<boolean> {
118
- if(swap.state!==FromBTCLNSwapState.FAILED && swap.state!==FromBTCLNSwapState.CLAIM_CLAIMED) {
119
- swap.state = FromBTCLNSwapState.CLAIM_CLAIMED;
142
+ if(swap._state!==FromBTCLNSwapState.FAILED && swap._state!==FromBTCLNSwapState.CLAIM_CLAIMED) {
143
+ swap._state = FromBTCLNSwapState.CLAIM_CLAIMED;
144
+ swap._setSwapSecret(event.result);
120
145
  return Promise.resolve(true);
121
146
  }
122
147
  return Promise.resolve(false);
123
148
  }
124
149
 
150
+ /**
151
+ * @inheritDoc
152
+ * @internal
153
+ */
125
154
  protected processEventRefund(swap: FromBTCLNSwap<T>, event: RefundEvent<T["Data"]>): Promise<boolean> {
126
- if(swap.state!==FromBTCLNSwapState.CLAIM_CLAIMED && swap.state!==FromBTCLNSwapState.FAILED) {
127
- swap.state = FromBTCLNSwapState.FAILED;
155
+ if(swap._state!==FromBTCLNSwapState.CLAIM_CLAIMED && swap._state!==FromBTCLNSwapState.FAILED) {
156
+ swap._state = FromBTCLNSwapState.FAILED;
128
157
  return Promise.resolve(true);
129
158
  }
130
159
  return Promise.resolve(false);
@@ -139,8 +168,10 @@ export class FromBTCLNWrapper<
139
168
  * @param options Options as passed to the swap creation function
140
169
  * @param decodedPr Decoded bolt11 lightning network invoice
141
170
  * @param paymentHash Expected payment hash of the bolt11 lightning network invoice
142
- * @private
171
+ *
143
172
  * @throws {IntermediaryError} in case the response is invalid
173
+ *
174
+ * @private
144
175
  */
145
176
  private verifyReturnedData(
146
177
  resp: FromBTCLNResponseType,
@@ -171,18 +202,21 @@ export class FromBTCLNWrapper<
171
202
  }
172
203
 
173
204
  /**
174
- * Returns a newly created swap, receiving 'amount' on lightning network
205
+ * Returns a newly created legacy Lightning -> Smart chain swap using the HTLC based escrow swap protocol,
206
+ * where the user needs to manually settle swap on the destination smart chain. The user has to pay
207
+ * a bolt11 invoice on the input lightning network side.
175
208
  *
176
- * @param signer Smart chain signer's address intiating the swap
177
- * @param amountData Amount of token & amount to swap
178
- * @param lps LPs (liquidity providers) to get the quotes from
179
- * @param options Quote options
180
- * @param additionalParams Additional parameters sent to the LP when creating the swap
181
- * @param abortSignal Abort signal for aborting the process
182
- * @param preFetches
209
+ * @param recipient Smart chain signer's address on the destination chain, that will have to manually
210
+ * settle the swap.
211
+ * @param amountData Amount, token and exact input/output data for to swap
212
+ * @param lps An array of intermediaries (LPs) to get the quotes from
213
+ * @param options Optional additional quote options
214
+ * @param additionalParams Optional additional parameters sent to the LP when creating the swap
215
+ * @param abortSignal Abort signal
216
+ * @param preFetches Optional pre-fetches for speeding up the quoting process (mainly used internally)
183
217
  */
184
218
  create(
185
- signer: string,
219
+ recipient: string,
186
220
  amountData: AmountData,
187
221
  lps: Intermediary[],
188
222
  options?: FromBTCLNOptions,
@@ -198,20 +232,20 @@ export class FromBTCLNWrapper<
198
232
  intermediary: Intermediary
199
233
  }[] {
200
234
  if(options==null) options = {};
201
- options.unsafeSkipLnNodeCheck ??= this.options.unsafeSkipLnNodeCheck;
235
+ options.unsafeSkipLnNodeCheck ??= this._options.unsafeSkipLnNodeCheck;
202
236
 
203
237
  if(options.descriptionHash!=null && options.descriptionHash.length!==32)
204
238
  throw new UserError("Invalid description hash length");
205
239
 
206
240
  const {secret, paymentHash} = this.getSecretAndHash();
207
- const claimHash = this.contract.getHashForHtlc(paymentHash);
241
+ const claimHash = this._contract.getHashForHtlc(paymentHash);
208
242
 
209
- const nativeTokenAddress = this.chain.getNativeCurrencyAddress();
243
+ const nativeTokenAddress = this._chain.getNativeCurrencyAddress();
210
244
 
211
245
  const _abortController = extendAbortController(abortSignal);
212
246
  const _preFetches = {
213
247
  pricePrefetchPromise: preFetches?.pricePrefetchPromise ?? this.preFetchPrice(amountData, _abortController.signal),
214
- feeRatePromise: preFetches?.feeRatePromise ?? this.preFetchFeeRate(signer, amountData, claimHash.toString("hex"), _abortController),
248
+ feeRatePromise: preFetches?.feeRatePromise ?? this.preFetchFeeRate(recipient, amountData, claimHash.toString("hex"), _abortController),
215
249
  usdPricePrefetchPromise: preFetches?.usdPricePrefetchPromise ?? this.preFetchUsdPrice(_abortController.signal),
216
250
  }
217
251
 
@@ -231,14 +265,14 @@ export class FromBTCLNWrapper<
231
265
  {
232
266
  paymentHash,
233
267
  amount: amountData.amount,
234
- claimer: signer,
268
+ claimer: recipient,
235
269
  token: amountData.token.toString(),
236
270
  descriptionHash: options?.descriptionHash,
237
271
  exactOut: !amountData.exactIn,
238
272
  feeRate: throwIfUndefined(_preFetches.feeRatePromise),
239
273
  additionalParams
240
274
  },
241
- this.options.postRequestTimeout, abortController.signal, retryCount>0 ? false : undefined
275
+ this._options.postRequestTimeout, abortController.signal, retryCount>0 ? false : undefined
242
276
  );
243
277
 
244
278
  return {
@@ -270,8 +304,8 @@ export class FromBTCLNWrapper<
270
304
  swapFee: resp.swapFee,
271
305
  swapFeeBtc: resp.swapFee * amountIn / (resp.total - resp.swapFee),
272
306
  feeRate: (await _preFetches.feeRatePromise)!,
273
- initialSwapData: await this.contract.createSwapData(
274
- ChainSwapType.HTLC, lp.getAddress(this.chainIdentifier), signer, amountData.token,
307
+ initialSwapData: await this._contract.createSwapData(
308
+ ChainSwapType.HTLC, lp.getAddress(this.chainIdentifier), recipient, amountData.token,
275
309
  resp.total, claimHash.toString("hex"),
276
310
  this.getRandomSequence(), BigInt(Math.floor(Date.now()/1000)), false, true,
277
311
  resp.securityDeposit, 0n, nativeTokenAddress
@@ -292,17 +326,21 @@ export class FromBTCLNWrapper<
292
326
  }
293
327
 
294
328
  /**
295
- * Returns a newly created swap, receiving 'amount' from the lnurl-withdraw
329
+ * Returns a newly created legacy Lightning -> Smart chain swap using the HTLC based escrow swap protocol,
330
+ * where the user needs to manually settle swap on the destination smart chain. The swap is created
331
+ * with an LNURL-withdraw link which will be used to pay the generated bolt11 invoice automatically
332
+ * when {@link FromBTCLNSwap.waitForPayment} is called on the swap.
296
333
  *
297
- * @param signer Smart chains signer's address intiating the swap
298
- * @param lnurl LNURL-withdraw to withdraw funds from
299
- * @param amountData Amount of token & amount to swap
300
- * @param lps LPs (liquidity providers) to get the quotes from
301
- * @param additionalParams Additional parameters sent to the LP when creating the swap
302
- * @param abortSignal Abort signal for aborting the process
334
+ * @param recipient Smart chain signer's address on the destination chain, that will have to manually
335
+ * settle the swap.
336
+ * @param lnurl LNURL-withdraw link to pull the funds from
337
+ * @param amountData Amount, token and exact input/output data for to swap
338
+ * @param lps An array of intermediaries (LPs) to get the quotes from
339
+ * @param additionalParams Optional additional parameters sent to the LP when creating the swap
340
+ * @param abortSignal Abort signal
303
341
  */
304
342
  async createViaLNURL(
305
- signer: string,
343
+ recipient: string,
306
344
  lnurl: string | LNURLWithdrawParamsWithUrl,
307
345
  amountData: AmountData,
308
346
  lps: Intermediary[],
@@ -318,12 +356,12 @@ export class FromBTCLNWrapper<
318
356
  const preFetches = {
319
357
  pricePrefetchPromise: this.preFetchPrice(amountData, abortController.signal),
320
358
  usdPricePrefetchPromise: this.preFetchUsdPrice(abortController.signal),
321
- feeRatePromise: this.preFetchFeeRate(signer, amountData, undefined, abortController)
359
+ feeRatePromise: this.preFetchFeeRate(recipient, amountData, undefined, abortController)
322
360
  };
323
361
 
324
362
  try {
325
363
  const exactOutAmountPromise: Promise<bigint | undefined> | undefined = !amountData.exactIn ? preFetches.pricePrefetchPromise.then(price =>
326
- this.prices.getToBtcSwapAmount(this.chainIdentifier, amountData.amount, amountData.token, abortController.signal, price)
364
+ this._prices.getToBtcSwapAmount(this.chainIdentifier, amountData.amount, amountData.token, abortController.signal, price)
327
365
  ).catch(e => {
328
366
  abortController.abort(e);
329
367
  return undefined;
@@ -345,12 +383,14 @@ export class FromBTCLNWrapper<
345
383
  if((amount * 105n / 100n) > max) throw new UserError("Amount more than LNURL-withdraw maximum");
346
384
  }
347
385
 
348
- return this.create(signer, amountData, lps, undefined, additionalParams, abortSignal, preFetches).map(data => {
386
+ return this.create(recipient, amountData, lps, undefined, additionalParams, abortSignal, preFetches).map(data => {
349
387
  return {
350
388
  quote: data.quote.then(quote => {
351
- quote.lnurl = withdrawRequest.url;
352
- quote.lnurlK1 = withdrawRequest.k1;
353
- quote.lnurlCallback = withdrawRequest.callback;
389
+ quote._setLNURLData(
390
+ withdrawRequest.url,
391
+ withdrawRequest.k1,
392
+ withdrawRequest.callback
393
+ )
354
394
 
355
395
  const amountIn = quote.getInput().rawAmount!;
356
396
  if(amountIn < min) throw new UserError("Amount less than LNURL-withdraw minimum");
@@ -367,6 +407,10 @@ export class FromBTCLNWrapper<
367
407
  }
368
408
  }
369
409
 
410
+ /**
411
+ * @inheritDoc
412
+ * @internal
413
+ */
370
414
  protected async _checkPastSwaps(pastSwaps: FromBTCLNSwap<T>[]): Promise<{
371
415
  changedSwaps: FromBTCLNSwap<T>[];
372
416
  removeSwaps: FromBTCLNSwap<T>[]
@@ -374,7 +418,7 @@ export class FromBTCLNWrapper<
374
418
  const changedSwapSet: Set<FromBTCLNSwap<T>> = new Set();
375
419
 
376
420
  const swapExpiredStatus: {[id: string]: boolean} = {};
377
- const checkStatusSwaps: (FromBTCLNSwap<T> & {data: T["Data"]})[] = [];
421
+ const checkStatusSwaps: (FromBTCLNSwap<T> & {_data: T["Data"]})[] = [];
378
422
 
379
423
  await Promise.all(pastSwaps.map(async (pastSwap) => {
380
424
  if(pastSwap._shouldCheckIntermediary()) {
@@ -391,13 +435,13 @@ export class FromBTCLNWrapper<
391
435
  //Check expiry
392
436
  swapExpiredStatus[pastSwap.getId()] = await pastSwap._verifyQuoteDefinitelyExpired();
393
437
  }
394
- if(pastSwap._shouldFetchCommitStatus()) {
438
+ if(pastSwap._shouldFetchOnchainState()) {
395
439
  //Add to swaps for which status should be checked
396
- if(pastSwap.data!=null) checkStatusSwaps.push(pastSwap as (FromBTCLNSwap<T> & {data: T["Data"]}));
440
+ if(pastSwap._data!=null) checkStatusSwaps.push(pastSwap as (FromBTCLNSwap<T> & {_data: T["Data"]}));
397
441
  }
398
442
  }));
399
443
 
400
- const swapStatuses = await this.contract.getCommitStatuses(checkStatusSwaps.map(val => ({signer: val._getInitiator(), swapData: val.data})));
444
+ const swapStatuses = await this._contract.getCommitStatuses(checkStatusSwaps.map(val => ({signer: val._getInitiator(), swapData: val._data})));
401
445
 
402
446
  for(let pastSwap of checkStatusSwaps) {
403
447
  const shouldSave = await pastSwap._sync(
@@ -425,4 +469,54 @@ export class FromBTCLNWrapper<
425
469
  };
426
470
  }
427
471
 
472
+ /**
473
+ * @inheritDoc
474
+ * @internal
475
+ */
476
+ async recoverFromSwapDataAndState(
477
+ init: {data: T["Data"], getInitTxId: () => Promise<string>, getTxBlock: () => Promise<{blockTime: number, blockHeight: number}>},
478
+ state: SwapCommitState,
479
+ lp?: Intermediary
480
+ ): Promise<FromBTCLNSwap<T> | null> {
481
+ const data = init.data;
482
+
483
+ let paymentHash = data.getHTLCHashHint();
484
+ let secret: string | undefined;
485
+ if(state.type===SwapCommitStateType.PAID) {
486
+ secret = await state.getClaimResult();
487
+ paymentHash = Buffer.from(sha256(Buffer.from(secret, "hex"))).toString("hex");
488
+ }
489
+
490
+ const swapInit: FromBTCLNSwapInit<T["Data"]> = {
491
+ pricingInfo: {
492
+ isValid: true,
493
+ satsBaseFee: 0n,
494
+ swapPriceUSatPerToken: 100_000_000_000_000n,
495
+ realPriceUSatPerToken: 100_000_000_000_000n,
496
+ differencePPM: 0n,
497
+ feePPM: 0n,
498
+ },
499
+ url: lp?.url,
500
+ expiry: 0,
501
+ swapFee: 0n,
502
+ swapFeeBtc: 0n,
503
+ feeRate: "",
504
+ signatureData: undefined,
505
+ initialSwapData: data,
506
+ data,
507
+ pr: paymentHash ?? undefined,
508
+ secret,
509
+ exactIn: false
510
+ }
511
+ const swap = new FromBTCLNSwap(this, swapInit);
512
+ swap._commitTxId = await init.getInitTxId();
513
+ const blockData = await init.getTxBlock();
514
+ swap.createdAt = blockData.blockTime * 1000;
515
+ swap._setInitiated();
516
+ swap._state = FromBTCLNSwapState.CLAIM_COMMITED;
517
+ await swap._sync(false, false, state);
518
+ await swap._save();
519
+ return swap;
520
+ }
521
+
428
522
  }