@atomiqlabs/sdk 7.0.11 → 8.0.7

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 (364) hide show
  1. package/README.md +45 -29
  2. package/dist/SmartChainAssets.d.ts +11 -3
  3. package/dist/SmartChainAssets.js +7 -3
  4. package/dist/bitcoin/BitcoinRpcWithAddressIndex.d.ts +68 -0
  5. package/dist/bitcoin/BitcoinRpcWithAddressIndex.js +2 -0
  6. package/dist/bitcoin/LightningNetworkApi.d.ts +12 -0
  7. package/dist/bitcoin/LightningNetworkApi.js +2 -0
  8. package/dist/bitcoin/coinselect2/accumulative.d.ts +6 -0
  9. package/dist/bitcoin/coinselect2/accumulative.js +52 -0
  10. package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -0
  11. package/dist/bitcoin/coinselect2/blackjack.js +38 -0
  12. package/dist/bitcoin/coinselect2/index.d.ts +19 -0
  13. package/dist/bitcoin/coinselect2/index.js +69 -0
  14. package/dist/bitcoin/coinselect2/utils.d.ts +71 -0
  15. package/dist/bitcoin/coinselect2/utils.js +123 -0
  16. package/dist/bitcoin/mempool/MempoolApi.d.ts +350 -0
  17. package/dist/bitcoin/mempool/MempoolApi.js +311 -0
  18. package/dist/bitcoin/mempool/MempoolBitcoinBlock.d.ts +44 -0
  19. package/dist/bitcoin/mempool/MempoolBitcoinBlock.js +48 -0
  20. package/dist/bitcoin/mempool/MempoolBitcoinRpc.d.ts +119 -0
  21. package/dist/bitcoin/mempool/MempoolBitcoinRpc.js +361 -0
  22. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.d.ts +22 -0
  23. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.js +105 -0
  24. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +93 -0
  25. package/dist/bitcoin/wallet/BitcoinWallet.js +273 -0
  26. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +28 -0
  27. package/dist/bitcoin/wallet/IBitcoinWallet.js +20 -0
  28. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.d.ts +21 -0
  29. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.js +2 -0
  30. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.d.ts +7 -0
  31. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.js +2 -0
  32. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +40 -0
  33. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +86 -0
  34. package/dist/enums/FeeType.d.ts +8 -0
  35. package/dist/enums/FeeType.js +12 -0
  36. package/dist/enums/SwapAmountType.d.ts +8 -0
  37. package/dist/enums/SwapAmountType.js +12 -0
  38. package/dist/enums/SwapDirection.d.ts +8 -0
  39. package/dist/enums/SwapDirection.js +12 -0
  40. package/dist/enums/SwapType.d.ts +14 -0
  41. package/dist/enums/SwapType.js +18 -0
  42. package/dist/errors/IntermediaryError.d.ts +9 -0
  43. package/dist/errors/IntermediaryError.js +26 -0
  44. package/dist/errors/PaymentAuthError.d.ts +11 -0
  45. package/dist/errors/PaymentAuthError.js +23 -0
  46. package/dist/errors/RequestError.d.ts +18 -0
  47. package/dist/errors/RequestError.js +46 -0
  48. package/dist/errors/UserError.d.ts +7 -0
  49. package/dist/errors/UserError.js +15 -0
  50. package/dist/events/UnifiedSwapEventListener.d.ts +23 -0
  51. package/dist/events/UnifiedSwapEventListener.js +130 -0
  52. package/dist/http/HttpUtils.d.ts +27 -0
  53. package/dist/http/HttpUtils.js +91 -0
  54. package/dist/http/paramcoders/IParamReader.d.ts +8 -0
  55. package/dist/http/paramcoders/IParamReader.js +2 -0
  56. package/dist/http/paramcoders/ParamDecoder.d.ts +44 -0
  57. package/dist/http/paramcoders/ParamDecoder.js +132 -0
  58. package/dist/http/paramcoders/ParamEncoder.d.ts +20 -0
  59. package/dist/http/paramcoders/ParamEncoder.js +31 -0
  60. package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -0
  61. package/dist/http/paramcoders/SchemaVerifier.js +145 -0
  62. package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -0
  63. package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -0
  64. package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -0
  65. package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -0
  66. package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -0
  67. package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -0
  68. package/dist/index.d.ts +82 -4
  69. package/dist/index.js +128 -4
  70. package/dist/intermediaries/Intermediary.d.ts +111 -0
  71. package/dist/intermediaries/Intermediary.js +115 -0
  72. package/dist/intermediaries/IntermediaryDiscovery.d.ts +166 -0
  73. package/dist/intermediaries/IntermediaryDiscovery.js +390 -0
  74. package/dist/intermediaries/apis/IntermediaryAPI.d.ts +436 -0
  75. package/dist/intermediaries/apis/IntermediaryAPI.js +600 -0
  76. package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +154 -0
  77. package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +136 -0
  78. package/dist/lnurl/LNURL.d.ts +102 -0
  79. package/dist/lnurl/LNURL.js +321 -0
  80. package/dist/prices/RedundantSwapPrice.d.ts +89 -0
  81. package/dist/prices/RedundantSwapPrice.js +202 -0
  82. package/dist/prices/SingleSwapPrice.d.ts +31 -0
  83. package/dist/prices/SingleSwapPrice.js +41 -0
  84. package/dist/prices/SwapPriceWithChain.d.ts +70 -0
  85. package/dist/prices/SwapPriceWithChain.js +91 -0
  86. package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -0
  87. package/dist/prices/abstract/ICachedSwapPrice.js +62 -0
  88. package/dist/prices/abstract/IPriceProvider.d.ts +81 -0
  89. package/dist/prices/abstract/IPriceProvider.js +74 -0
  90. package/dist/prices/abstract/ISwapPrice.d.ts +117 -0
  91. package/dist/prices/abstract/ISwapPrice.js +219 -0
  92. package/dist/prices/providers/BinancePriceProvider.d.ts +16 -0
  93. package/dist/prices/providers/BinancePriceProvider.js +23 -0
  94. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +17 -0
  95. package/dist/prices/providers/CoinGeckoPriceProvider.js +23 -0
  96. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +19 -0
  97. package/dist/prices/providers/CoinPaprikaPriceProvider.js +23 -0
  98. package/dist/prices/providers/CustomPriceProvider.d.ts +13 -0
  99. package/dist/prices/providers/CustomPriceProvider.js +24 -0
  100. package/dist/prices/providers/KrakenPriceProvider.d.ts +29 -0
  101. package/dist/prices/providers/KrakenPriceProvider.js +36 -0
  102. package/dist/prices/providers/OKXPriceProvider.d.ts +28 -0
  103. package/dist/prices/providers/OKXPriceProvider.js +23 -0
  104. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +14 -0
  105. package/dist/prices/providers/abstract/ExchangePriceProvider.js +18 -0
  106. package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -0
  107. package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -0
  108. package/dist/storage/IUnifiedStorage.d.ts +73 -0
  109. package/dist/storage/IUnifiedStorage.js +2 -0
  110. package/dist/storage/UnifiedSwapStorage.d.ts +82 -0
  111. package/dist/storage/UnifiedSwapStorage.js +83 -0
  112. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +39 -0
  113. package/dist/storage-browser/IndexedDBUnifiedStorage.js +275 -0
  114. package/dist/{storage → storage-browser}/LocalStorageManager.d.ts +1 -0
  115. package/dist/{storage → storage-browser}/LocalStorageManager.js +2 -1
  116. package/dist/swapper/Swapper.d.ts +533 -0
  117. package/dist/swapper/Swapper.js +1566 -0
  118. package/dist/swapper/SwapperFactory.d.ts +87 -0
  119. package/dist/{SwapperFactory.js → swapper/SwapperFactory.js} +40 -22
  120. package/dist/swapper/SwapperUtils.d.ts +153 -0
  121. package/dist/swapper/SwapperUtils.js +420 -0
  122. package/dist/swapper/SwapperWithChain.d.ts +214 -0
  123. package/dist/swapper/SwapperWithChain.js +315 -0
  124. package/dist/swapper/SwapperWithSigner.d.ts +178 -0
  125. package/dist/swapper/SwapperWithSigner.js +172 -0
  126. package/dist/swaps/IAddressSwap.d.ts +13 -0
  127. package/dist/swaps/IAddressSwap.js +13 -0
  128. package/dist/swaps/IBTCWalletSwap.d.ts +55 -0
  129. package/dist/swaps/IBTCWalletSwap.js +17 -0
  130. package/dist/swaps/IClaimableSwap.d.ts +17 -0
  131. package/dist/swaps/IClaimableSwap.js +14 -0
  132. package/dist/swaps/IClaimableSwapWrapper.d.ts +5 -0
  133. package/dist/swaps/IClaimableSwapWrapper.js +2 -0
  134. package/dist/swaps/IRefundableSwap.d.ts +17 -0
  135. package/dist/swaps/IRefundableSwap.js +13 -0
  136. package/dist/swaps/ISwap.d.ts +207 -0
  137. package/dist/swaps/ISwap.js +264 -0
  138. package/dist/swaps/ISwapWithGasDrop.d.ts +15 -0
  139. package/dist/swaps/ISwapWithGasDrop.js +11 -0
  140. package/dist/swaps/ISwapWrapper.d.ts +153 -0
  141. package/dist/swaps/ISwapWrapper.js +227 -0
  142. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +53 -0
  143. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +116 -0
  144. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +70 -0
  145. package/dist/swaps/escrow_swaps/IEscrowSwap.js +132 -0
  146. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +85 -0
  147. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +122 -0
  148. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +86 -0
  149. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +115 -0
  150. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +93 -0
  151. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +121 -0
  152. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +45 -0
  153. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +65 -0
  154. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +263 -0
  155. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +933 -0
  156. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +110 -0
  157. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +307 -0
  158. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +236 -0
  159. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +898 -0
  160. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +125 -0
  161. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +393 -0
  162. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +245 -0
  163. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +841 -0
  164. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +120 -0
  165. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +294 -0
  166. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +228 -0
  167. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +721 -0
  168. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +37 -0
  169. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +93 -0
  170. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +86 -0
  171. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +213 -0
  172. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +170 -0
  173. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +520 -0
  174. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +50 -0
  175. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +109 -0
  176. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +93 -0
  177. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +217 -0
  178. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +315 -0
  179. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1098 -0
  180. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +125 -0
  181. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +631 -0
  182. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +107 -0
  183. package/dist/swaps/trusted/ln/LnForGasSwap.js +343 -0
  184. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +21 -0
  185. package/dist/swaps/trusted/ln/LnForGasWrapper.js +62 -0
  186. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +164 -0
  187. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +520 -0
  188. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +48 -0
  189. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +74 -0
  190. package/dist/types/AmountData.d.ts +9 -0
  191. package/dist/types/AmountData.js +2 -0
  192. package/dist/types/CustomPriceFunction.d.ts +5 -0
  193. package/dist/types/CustomPriceFunction.js +2 -0
  194. package/dist/types/PriceInfoType.d.ts +28 -0
  195. package/dist/types/PriceInfoType.js +57 -0
  196. package/dist/types/SwapExecutionAction.d.ts +7 -0
  197. package/dist/types/SwapExecutionAction.js +2 -0
  198. package/dist/types/SwapWithSigner.d.ts +14 -0
  199. package/dist/types/SwapWithSigner.js +40 -0
  200. package/dist/types/Token.d.ts +53 -0
  201. package/dist/types/Token.js +58 -0
  202. package/dist/types/TokenAmount.d.ts +57 -0
  203. package/dist/types/TokenAmount.js +47 -0
  204. package/dist/types/fees/Fee.d.ts +49 -0
  205. package/dist/types/fees/Fee.js +2 -0
  206. package/dist/types/fees/FeeBreakdown.d.ts +10 -0
  207. package/dist/types/fees/FeeBreakdown.js +2 -0
  208. package/dist/types/fees/PercentagePPM.d.ts +15 -0
  209. package/dist/types/fees/PercentagePPM.js +17 -0
  210. package/dist/types/lnurl/LNURLPay.d.ts +54 -0
  211. package/dist/types/lnurl/LNURLPay.js +28 -0
  212. package/dist/types/lnurl/LNURLWithdraw.d.ts +42 -0
  213. package/dist/types/lnurl/LNURLWithdraw.js +24 -0
  214. package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -0
  215. package/dist/utils/AutomaticClockDriftCorrection.js +70 -0
  216. package/dist/utils/BitcoinUtils.d.ts +13 -0
  217. package/dist/utils/BitcoinUtils.js +98 -0
  218. package/dist/utils/BitcoinWalletUtils.d.ts +7 -0
  219. package/dist/utils/BitcoinWalletUtils.js +14 -0
  220. package/dist/utils/Logger.d.ts +7 -0
  221. package/dist/utils/Logger.js +12 -0
  222. package/dist/utils/RetryUtils.d.ts +21 -0
  223. package/dist/utils/RetryUtils.js +66 -0
  224. package/dist/utils/SwapUtils.d.ts +31 -0
  225. package/dist/utils/SwapUtils.js +18 -0
  226. package/dist/{Utils.d.ts → utils/TimeoutUtils.d.ts} +9 -3
  227. package/dist/utils/TimeoutUtils.js +55 -0
  228. package/dist/utils/TokenUtils.d.ts +11 -0
  229. package/dist/utils/TokenUtils.js +29 -0
  230. package/dist/utils/TypeUtils.d.ts +7 -0
  231. package/dist/utils/TypeUtils.js +2 -0
  232. package/dist/utils/Utils.d.ts +57 -0
  233. package/dist/utils/Utils.js +178 -0
  234. package/package.json +14 -6
  235. package/src/SmartChainAssets.ts +11 -3
  236. package/src/bitcoin/BitcoinRpcWithAddressIndex.ts +87 -0
  237. package/src/bitcoin/LightningNetworkApi.ts +16 -0
  238. package/src/bitcoin/coinselect2/accumulative.ts +68 -0
  239. package/src/bitcoin/coinselect2/blackjack.ts +49 -0
  240. package/src/bitcoin/coinselect2/index.ts +92 -0
  241. package/src/bitcoin/coinselect2/utils.ts +189 -0
  242. package/src/bitcoin/mempool/MempoolApi.ts +554 -0
  243. package/src/bitcoin/mempool/MempoolBitcoinBlock.ts +88 -0
  244. package/src/bitcoin/mempool/MempoolBitcoinRpc.ts +437 -0
  245. package/src/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.ts +134 -0
  246. package/src/bitcoin/wallet/BitcoinWallet.ts +375 -0
  247. package/src/bitcoin/wallet/IBitcoinWallet.ts +44 -0
  248. package/src/bitcoin/wallet/MinimalBitcoinWalletInterface.ts +19 -0
  249. package/src/bitcoin/wallet/MinimalLightningNetworkWalletInterface.ts +7 -0
  250. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +108 -0
  251. package/src/enums/FeeType.ts +9 -0
  252. package/src/enums/SwapAmountType.ts +9 -0
  253. package/src/enums/SwapDirection.ts +9 -0
  254. package/src/enums/SwapType.ts +15 -0
  255. package/src/errors/IntermediaryError.ts +24 -0
  256. package/src/errors/PaymentAuthError.ts +26 -0
  257. package/src/errors/RequestError.ts +51 -0
  258. package/src/errors/UserError.ts +14 -0
  259. package/src/events/UnifiedSwapEventListener.ts +171 -0
  260. package/src/http/HttpUtils.ts +92 -0
  261. package/src/http/paramcoders/IParamReader.ts +10 -0
  262. package/src/http/paramcoders/ParamDecoder.ts +142 -0
  263. package/src/http/paramcoders/ParamEncoder.ts +37 -0
  264. package/src/http/paramcoders/SchemaVerifier.ts +153 -0
  265. package/src/http/paramcoders/client/ResponseParamDecoder.ts +58 -0
  266. package/src/http/paramcoders/client/StreamParamEncoder.ts +29 -0
  267. package/src/http/paramcoders/client/StreamingFetchPromise.ts +193 -0
  268. package/src/index.ts +102 -4
  269. package/src/intermediaries/Intermediary.ts +204 -0
  270. package/src/intermediaries/IntermediaryDiscovery.ts +485 -0
  271. package/src/intermediaries/apis/IntermediaryAPI.ts +940 -0
  272. package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -0
  273. package/src/lnurl/LNURL.ts +403 -0
  274. package/src/prices/RedundantSwapPrice.ts +245 -0
  275. package/src/prices/SingleSwapPrice.ts +47 -0
  276. package/src/prices/SwapPriceWithChain.ts +157 -0
  277. package/src/prices/abstract/ICachedSwapPrice.ts +86 -0
  278. package/src/prices/abstract/IPriceProvider.ts +128 -0
  279. package/src/prices/abstract/ISwapPrice.ts +328 -0
  280. package/src/prices/providers/BinancePriceProvider.ts +41 -0
  281. package/src/prices/providers/CoinGeckoPriceProvider.ts +40 -0
  282. package/src/prices/providers/CoinPaprikaPriceProvider.ts +44 -0
  283. package/src/prices/providers/CustomPriceProvider.ts +29 -0
  284. package/src/prices/providers/KrakenPriceProvider.ts +74 -0
  285. package/src/prices/providers/OKXPriceProvider.ts +53 -0
  286. package/src/prices/providers/abstract/ExchangePriceProvider.ts +29 -0
  287. package/src/prices/providers/abstract/HttpPriceProvider.ts +15 -0
  288. package/src/storage/IUnifiedStorage.ts +83 -0
  289. package/src/storage/UnifiedSwapStorage.ts +104 -0
  290. package/src/storage-browser/IndexedDBUnifiedStorage.ts +328 -0
  291. package/src/{storage → storage-browser}/LocalStorageManager.ts +2 -1
  292. package/src/swapper/Swapper.ts +2107 -0
  293. package/src/{SwapperFactory.ts → swapper/SwapperFactory.ts} +116 -75
  294. package/src/swapper/SwapperUtils.ts +510 -0
  295. package/src/swapper/SwapperWithChain.ts +464 -0
  296. package/src/swapper/SwapperWithSigner.ts +300 -0
  297. package/src/swaps/IAddressSwap.ts +20 -0
  298. package/src/swaps/IBTCWalletSwap.ts +77 -0
  299. package/src/swaps/IClaimableSwap.ts +30 -0
  300. package/src/swaps/IClaimableSwapWrapper.ts +9 -0
  301. package/src/swaps/IRefundableSwap.ts +29 -0
  302. package/src/swaps/ISwap.ts +490 -0
  303. package/src/swaps/ISwapWithGasDrop.ts +19 -0
  304. package/src/swaps/ISwapWrapper.ts +344 -0
  305. package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +168 -0
  306. package/src/swaps/escrow_swaps/IEscrowSwap.ts +197 -0
  307. package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +210 -0
  308. package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +150 -0
  309. package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +219 -0
  310. package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +84 -0
  311. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1082 -0
  312. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +429 -0
  313. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1078 -0
  314. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +549 -0
  315. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +974 -0
  316. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +443 -0
  317. package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +860 -0
  318. package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +104 -0
  319. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +256 -0
  320. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +716 -0
  321. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +151 -0
  322. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +299 -0
  323. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1394 -0
  324. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +796 -0
  325. package/src/swaps/trusted/ln/LnForGasSwap.ts +402 -0
  326. package/src/swaps/trusted/ln/LnForGasWrapper.ts +70 -0
  327. package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +633 -0
  328. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +110 -0
  329. package/src/types/AmountData.ts +9 -0
  330. package/src/types/CustomPriceFunction.ts +5 -0
  331. package/src/types/PriceInfoType.ts +67 -0
  332. package/src/types/SwapExecutionAction.ts +8 -0
  333. package/src/types/SwapWithSigner.ts +57 -0
  334. package/src/types/Token.ts +90 -0
  335. package/src/types/TokenAmount.ts +110 -0
  336. package/src/types/fees/Fee.ts +55 -0
  337. package/src/types/fees/FeeBreakdown.ts +11 -0
  338. package/src/types/fees/PercentagePPM.ts +24 -0
  339. package/src/types/lnurl/LNURLPay.ts +72 -0
  340. package/src/types/lnurl/LNURLWithdraw.ts +55 -0
  341. package/src/utils/AutomaticClockDriftCorrection.ts +71 -0
  342. package/src/utils/BitcoinUtils.ts +86 -0
  343. package/src/utils/BitcoinWalletUtils.ts +16 -0
  344. package/src/utils/Logger.ts +15 -0
  345. package/src/utils/RetryUtils.ts +71 -0
  346. package/src/utils/SwapUtils.ts +38 -0
  347. package/src/utils/TimeoutUtils.ts +50 -0
  348. package/src/utils/TokenUtils.ts +25 -0
  349. package/src/utils/TypeUtils.ts +9 -0
  350. package/src/utils/Utils.ts +182 -0
  351. package/dist/SwapperFactory.d.ts +0 -52
  352. package/dist/Utils.js +0 -37
  353. package/dist/fs-storage/FileSystemStorageManager.d.ts +0 -15
  354. package/dist/fs-storage/FileSystemStorageManager.js +0 -60
  355. package/dist/fs-storage/index.d.ts +0 -1
  356. package/dist/fs-storage/index.js +0 -17
  357. package/src/SmartChainAssets.js +0 -75
  358. package/src/SwapperFactory.js +0 -120
  359. package/src/Utils.js +0 -37
  360. package/src/Utils.ts +0 -31
  361. package/src/fs-storage/FileSystemStorageManager.ts +0 -71
  362. package/src/fs-storage/index.ts +0 -1
  363. package/src/index.js +0 -21
  364. package/src/storage/LocalStorageManager.js +0 -72
@@ -0,0 +1,443 @@
1
+ import {IFromBTCWrapper} from "../IFromBTCWrapper";
2
+ import {FromBTCSwap, FromBTCSwapInit, FromBTCSwapState} from "./FromBTCSwap";
3
+ import {
4
+ ChainSwapType,
5
+ ChainType,
6
+ ClaimEvent,
7
+ InitializeEvent,
8
+ RefundEvent,
9
+ RelaySynchronizer,
10
+ SwapData,
11
+ BtcRelay
12
+ } from "@atomiqlabs/base";
13
+ import {EventEmitter} from "events";
14
+ import {Intermediary} from "../../../../intermediaries/Intermediary";
15
+ import {BitcoinRpcWithAddressIndex} from "../../../../bitcoin/BitcoinRpcWithAddressIndex";
16
+ import {ISwapPrice} from "../../../../prices/abstract/ISwapPrice";
17
+ import {ISwapWrapperOptions, WrapperCtorTokens} from "../../../ISwapWrapper";
18
+ import {Buffer} from "buffer";
19
+ import {IntermediaryError} from "../../../../errors/IntermediaryError";
20
+ import {SwapType} from "../../../../enums/SwapType";
21
+ import {
22
+ extendAbortController,
23
+ randomBytes,
24
+ throwIfUndefined
25
+ } from "../../../../utils/Utils";
26
+ import { toOutputScript} from "../../../../utils/BitcoinUtils";
27
+ import {FromBTCResponseType, IntermediaryAPI} from "../../../../intermediaries/apis/IntermediaryAPI";
28
+ import {RequestError} from "../../../../errors/RequestError";
29
+ import {BTC_NETWORK, TEST_NETWORK} from "@scure/btc-signer/utils";
30
+ import {UnifiedSwapEventListener} from "../../../../events/UnifiedSwapEventListener";
31
+ import {UnifiedSwapStorage} from "../../../../storage/UnifiedSwapStorage";
32
+ import {ISwap} from "../../../ISwap";
33
+ import {IClaimableSwapWrapper} from "../../../IClaimableSwapWrapper";
34
+ import {IFromBTCSelfInitDefinition} from "../IFromBTCSelfInitSwap";
35
+ import {AmountData} from "../../../../types/AmountData";
36
+ import {tryWithRetries} from "../../../../utils/RetryUtils";
37
+ import {AllOptional, AllRequired} from "../../../../utils/TypeUtils";
38
+
39
+ export type FromBTCOptions = {
40
+ feeSafetyFactor?: bigint,
41
+ blockSafetyFactor?: number,
42
+ unsafeZeroWatchtowerFee?: boolean
43
+ };
44
+
45
+ export type FromBTCWrapperOptions = ISwapWrapperOptions & {
46
+ safetyFactor: number,
47
+ blocksTillTxConfirms: number,
48
+ maxConfirmations: number,
49
+ minSendWindow: number,
50
+ bitcoinNetwork: BTC_NETWORK,
51
+ bitcoinBlocktime: number
52
+ };
53
+
54
+ export type FromBTCDefinition<T extends ChainType> = IFromBTCSelfInitDefinition<T, FromBTCWrapper<T>, FromBTCSwap<T>>;
55
+
56
+ export class FromBTCWrapper<
57
+ T extends ChainType
58
+ > extends IFromBTCWrapper<T, FromBTCDefinition<T>, FromBTCWrapperOptions> implements IClaimableSwapWrapper<FromBTCSwap<T>> {
59
+
60
+ public readonly claimableSwapStates = [FromBTCSwapState.BTC_TX_CONFIRMED];
61
+ public readonly TYPE = SwapType.FROM_BTC;
62
+ public readonly swapDeserializer = FromBTCSwap;
63
+
64
+ readonly synchronizer: RelaySynchronizer<any, T["TX"], any>;
65
+ readonly btcRelay: BtcRelay<any, T["TX"], any>;
66
+ readonly btcRpc: BitcoinRpcWithAddressIndex<any>;
67
+
68
+ /**
69
+ * @param chainIdentifier
70
+ * @param unifiedStorage Storage interface for the current environment
71
+ * @param unifiedChainEvents On-chain event listener
72
+ * @param chain
73
+ * @param contract Underlying contract handling the swaps
74
+ * @param prices Pricing to use
75
+ * @param tokens
76
+ * @param swapDataDeserializer Deserializer for SwapData
77
+ * @param btcRelay
78
+ * @param synchronizer Btc relay synchronizer
79
+ * @param btcRpc Bitcoin RPC which also supports getting transactions by txoHash
80
+ * @param options
81
+ * @param events Instance to use for emitting events
82
+ */
83
+ constructor(
84
+ chainIdentifier: string,
85
+ unifiedStorage: UnifiedSwapStorage<T>,
86
+ unifiedChainEvents: UnifiedSwapEventListener<T>,
87
+ chain: T["ChainInterface"],
88
+ contract: T["Contract"],
89
+ prices: ISwapPrice,
90
+ tokens: WrapperCtorTokens,
91
+ swapDataDeserializer: new (data: any) => T["Data"],
92
+ btcRelay: BtcRelay<any, T["TX"], any>,
93
+ synchronizer: RelaySynchronizer<any, T["TX"], any>,
94
+ btcRpc: BitcoinRpcWithAddressIndex<any>,
95
+ options?: AllOptional<FromBTCWrapperOptions>,
96
+ events?: EventEmitter<{swapState: [ISwap]}>
97
+ ) {
98
+ super(
99
+ chainIdentifier, unifiedStorage, unifiedChainEvents, chain, contract, prices, tokens, swapDataDeserializer,
100
+ {
101
+ bitcoinNetwork: options?.bitcoinNetwork ?? TEST_NETWORK,
102
+ safetyFactor: options?.safetyFactor ?? 2,
103
+ blocksTillTxConfirms: options?.blocksTillTxConfirms ?? 12,
104
+ maxConfirmations: options?.maxConfirmations ?? 6,
105
+ minSendWindow: options?.minSendWindow ?? 30*60, //Minimum time window for user to send in the on-chain funds for From BTC swap
106
+ bitcoinBlocktime: options?.bitcoinBlocktime ?? 10*60
107
+ },
108
+ events
109
+ );
110
+ this.btcRelay = btcRelay;
111
+ this.synchronizer = synchronizer;
112
+ this.btcRpc = btcRpc;
113
+ }
114
+
115
+ public readonly pendingSwapStates = [
116
+ FromBTCSwapState.PR_CREATED,
117
+ FromBTCSwapState.QUOTE_SOFT_EXPIRED,
118
+ FromBTCSwapState.CLAIM_COMMITED,
119
+ FromBTCSwapState.BTC_TX_CONFIRMED,
120
+ FromBTCSwapState.EXPIRED
121
+ ];
122
+ public readonly tickSwapState = [FromBTCSwapState.PR_CREATED, FromBTCSwapState.CLAIM_COMMITED, FromBTCSwapState.EXPIRED];
123
+
124
+ protected processEventInitialize(swap: FromBTCSwap<T>, event: InitializeEvent<T["Data"]>): Promise<boolean> {
125
+ if(swap.state===FromBTCSwapState.PR_CREATED || swap.state===FromBTCSwapState.QUOTE_SOFT_EXPIRED) {
126
+ swap.state = FromBTCSwapState.CLAIM_COMMITED;
127
+ return Promise.resolve(true);
128
+ }
129
+ return Promise.resolve(false);
130
+ }
131
+
132
+ protected async processEventClaim(swap: FromBTCSwap<T>, event: ClaimEvent<T["Data"]>): Promise<boolean> {
133
+ if(swap.state!==FromBTCSwapState.FAILED && swap.state!==FromBTCSwapState.CLAIM_CLAIMED) {
134
+ await swap._setBitcoinTxId(Buffer.from(event.result, "hex").reverse().toString("hex")).catch(e => {
135
+ this.logger.warn("processEventClaim(): Error setting bitcoin txId: ", e);
136
+ });
137
+ swap.state = FromBTCSwapState.CLAIM_CLAIMED;
138
+ return true;
139
+ }
140
+ return false;
141
+ }
142
+
143
+ protected processEventRefund(swap: FromBTCSwap<T>, event: RefundEvent<T["Data"]>): Promise<boolean> {
144
+ if(swap.state!==FromBTCSwapState.CLAIM_CLAIMED && swap.state!==FromBTCSwapState.FAILED) {
145
+ swap.state = FromBTCSwapState.FAILED;
146
+ return Promise.resolve(true);
147
+ }
148
+ return Promise.resolve(false);
149
+ }
150
+
151
+ /**
152
+ * Returns the swap expiry, leaving enough time for the user to send a transaction and for it to confirm
153
+ *
154
+ * @param data Parsed swap data
155
+ * @param requiredConfirmations Confirmations required to claim the tx
156
+ */
157
+ getOnchainSendTimeout(data: SwapData, requiredConfirmations: number): bigint {
158
+ const tsDelta = (this.options.blocksTillTxConfirms + requiredConfirmations) * this.options.bitcoinBlocktime * this.options.safetyFactor;
159
+ return data.getExpiry() - BigInt(tsDelta);
160
+ }
161
+
162
+ /**
163
+ * Pre-fetches claimer (watchtower) bounty data for the swap. Doesn't throw, instead returns null and aborts the
164
+ * provided abortController
165
+ *
166
+ * @param signer Smartchain signer address initiating the swap
167
+ * @param amountData
168
+ * @param options Options as passed to the swap creation function
169
+ * @param abortController
170
+ * @private
171
+ */
172
+ private async preFetchClaimerBounty(
173
+ signer: string,
174
+ amountData: AmountData,
175
+ options: AllRequired<FromBTCOptions>,
176
+ abortController: AbortController
177
+ ): Promise<{
178
+ feePerBlock: bigint,
179
+ safetyFactor: number,
180
+ startTimestamp: bigint,
181
+ addBlock: number,
182
+ addFee: bigint
183
+ } | undefined> {
184
+ const startTimestamp = BigInt(Math.floor(Date.now()/1000));
185
+
186
+ if(options.unsafeZeroWatchtowerFee) {
187
+ return {
188
+ feePerBlock: 0n,
189
+ safetyFactor: options.blockSafetyFactor,
190
+ startTimestamp: startTimestamp,
191
+ addBlock: 0,
192
+ addFee: 0n
193
+ }
194
+ }
195
+
196
+ const dummyAmount = BigInt(Math.floor(Math.random()* 0x1000000));
197
+ const dummySwapData = await this.contract.createSwapData(
198
+ ChainSwapType.CHAIN, signer, signer, amountData.token,
199
+ dummyAmount, this.contract.getHashForOnchain(randomBytes(20), dummyAmount, 3).toString("hex"),
200
+ this.getRandomSequence(), startTimestamp, false, true,
201
+ BigInt(Math.floor(Math.random() * 0x10000)), BigInt(Math.floor(Math.random() * 0x10000))
202
+ );
203
+
204
+ try {
205
+ const [feePerBlock, btcRelayData, currentBtcBlock, claimFeeRate] = await Promise.all([
206
+ this.btcRelay.getFeePerBlock(),
207
+ this.btcRelay.getTipData(),
208
+ this.btcRpc.getTipHeight(),
209
+ this.contract.getClaimFee(signer, dummySwapData)
210
+ ]);
211
+
212
+ if(btcRelayData==null) throw new Error("Btc relay not initialized!");
213
+
214
+ const currentBtcRelayBlock = btcRelayData.blockheight;
215
+ const addBlock = Math.max(currentBtcBlock-currentBtcRelayBlock, 0);
216
+ return {
217
+ feePerBlock: feePerBlock * options.feeSafetyFactor,
218
+ safetyFactor: options.blockSafetyFactor,
219
+ startTimestamp: startTimestamp,
220
+ addBlock,
221
+ addFee: claimFeeRate * options.feeSafetyFactor
222
+ }
223
+ } catch (e) {
224
+ abortController.abort(e);
225
+ return undefined;
226
+ }
227
+ }
228
+
229
+ /**
230
+ * Returns calculated claimer bounty calculated from the claimer bounty data as fetched from preFetchClaimerBounty()
231
+ *
232
+ * @param data Parsed swap data returned from the intermediary
233
+ * @param options Options as passed to the swap creation function
234
+ * @param claimerBounty Claimer bounty data as fetched from preFetchClaimerBounty() function
235
+ * @private
236
+ */
237
+ private getClaimerBounty(
238
+ data: T["Data"],
239
+ options: AllRequired<FromBTCOptions>,
240
+ claimerBounty: {
241
+ feePerBlock: bigint,
242
+ safetyFactor: number,
243
+ startTimestamp: bigint,
244
+ addBlock: number,
245
+ addFee: bigint
246
+ }
247
+ ) : bigint {
248
+ const tsDelta = data.getExpiry() - claimerBounty.startTimestamp;
249
+ const blocksDelta = tsDelta / BigInt(this.options.bitcoinBlocktime) * BigInt(options.blockSafetyFactor);
250
+ const totalBlock = blocksDelta + BigInt(claimerBounty.addBlock);
251
+ return claimerBounty.addFee + (totalBlock * claimerBounty.feePerBlock);
252
+ }
253
+
254
+ /**
255
+ * Verifies response returned from intermediary
256
+ *
257
+ * @param signer
258
+ * @param resp Response as returned by the intermediary
259
+ * @param amountData
260
+ * @param lp Intermediary
261
+ * @param options Options as passed to the swap creation function
262
+ * @param data Parsed swap data returned by the intermediary
263
+ * @param sequence Required swap sequence
264
+ * @param claimerBounty Claimer bount data as returned from the preFetchClaimerBounty() pre-fetch promise
265
+ * @param depositToken
266
+ * @private
267
+ * @throws {IntermediaryError} in case the response is invalid
268
+ */
269
+ private verifyReturnedData(
270
+ signer: string,
271
+ resp: FromBTCResponseType,
272
+ amountData: AmountData,
273
+ lp: Intermediary,
274
+ options: AllRequired<FromBTCOptions>,
275
+ data: T["Data"],
276
+ sequence: bigint,
277
+ claimerBounty: {
278
+ feePerBlock: bigint,
279
+ safetyFactor: number,
280
+ startTimestamp: bigint,
281
+ addBlock: number,
282
+ addFee: bigint
283
+ },
284
+ depositToken: string
285
+ ): void {
286
+ if(amountData.exactIn) {
287
+ if(resp.amount !== amountData.amount) throw new IntermediaryError("Invalid amount returned");
288
+ } else {
289
+ if(resp.total !== amountData.amount) throw new IntermediaryError("Invalid total returned");
290
+ }
291
+
292
+ const requiredConfirmations = resp.confirmations;
293
+ if(requiredConfirmations>this.options.maxConfirmations) throw new IntermediaryError("Requires too many confirmations");
294
+
295
+ const totalClaimerBounty = this.getClaimerBounty(data, options, claimerBounty);
296
+
297
+ if(
298
+ data.getClaimerBounty() !== totalClaimerBounty ||
299
+ data.getType()!=ChainSwapType.CHAIN ||
300
+ data.getSequence() !== sequence ||
301
+ data.getAmount() !== resp.total ||
302
+ data.isPayIn() ||
303
+ !data.isToken(amountData.token) ||
304
+ !data.isOfferer(lp.getAddress(this.chainIdentifier)) ||
305
+ !data.isClaimer(signer) ||
306
+ !data.isDepositToken(depositToken) ||
307
+ data.hasSuccessAction()
308
+ ) {
309
+ throw new IntermediaryError("Invalid data returned");
310
+ }
311
+
312
+ //Check that we have enough time to send the TX and for it to confirm
313
+ const expiry = this.getOnchainSendTimeout(data, requiredConfirmations);
314
+ const currentTimestamp = BigInt(Math.floor(Date.now()/1000));
315
+ if((expiry - currentTimestamp) < BigInt(this.options.minSendWindow)) {
316
+ throw new IntermediaryError("Send window too low");
317
+ }
318
+
319
+ const lockingScript = toOutputScript(this.options.bitcoinNetwork, resp.btcAddress);
320
+ const desiredExtraData = this.contract.getExtraData(lockingScript, resp.amount, requiredConfirmations);
321
+ const desiredClaimHash = this.contract.getHashForOnchain(lockingScript, resp.amount, requiredConfirmations);
322
+ if(!desiredClaimHash.equals(Buffer.from(data.getClaimHash(), "hex"))) {
323
+ throw new IntermediaryError("Invalid claim hash returned!");
324
+ }
325
+ const extraData = data.getExtraData();
326
+ if(extraData==null || !desiredExtraData.equals(Buffer.from(extraData, "hex"))) {
327
+ throw new IntermediaryError("Invalid extra data returned!");
328
+ }
329
+ }
330
+
331
+ /**
332
+ * Returns a newly created swap, receiving 'amount' on chain
333
+ *
334
+ * @param signer Smartchain signer's address intiating the swap
335
+ * @param amountData Amount of token & amount to swap
336
+ * @param lps LPs (liquidity providers) to get the quotes from
337
+ * @param options Quote options
338
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
339
+ * @param abortSignal Abort signal for aborting the process
340
+ */
341
+ create(
342
+ signer: string,
343
+ amountData: AmountData,
344
+ lps: Intermediary[],
345
+ options?: FromBTCOptions,
346
+ additionalParams?: Record<string, any>,
347
+ abortSignal?: AbortSignal
348
+ ): {
349
+ quote: Promise<FromBTCSwap<T>>,
350
+ intermediary: Intermediary
351
+ }[] {
352
+ const _options: AllRequired<FromBTCOptions> = {
353
+ blockSafetyFactor: options?.blockSafetyFactor ?? 1,
354
+ feeSafetyFactor: options?.feeSafetyFactor ?? 2n,
355
+ unsafeZeroWatchtowerFee: options?.unsafeZeroWatchtowerFee ?? false
356
+ };
357
+
358
+ const sequence: bigint = this.getRandomSequence();
359
+
360
+ const _abortController = extendAbortController(abortSignal);
361
+ const pricePrefetchPromise: Promise<bigint | undefined> = this.preFetchPrice(amountData, _abortController.signal);
362
+ const usdPricePrefetchPromise: Promise<number | undefined> = this.preFetchUsdPrice(_abortController.signal);
363
+ const claimerBountyPrefetchPromise = this.preFetchClaimerBounty(signer, amountData, _options, _abortController);
364
+ const nativeTokenAddress = this.chain.getNativeCurrencyAddress();
365
+ const feeRatePromise: Promise<string | undefined> = this.preFetchFeeRate(signer, amountData, undefined, _abortController);
366
+ const _signDataPromise: Promise<T["PreFetchVerification"] | undefined> | undefined = this.contract.preFetchBlockDataForSignatures==null ?
367
+ this.preFetchSignData(Promise.resolve(true)) :
368
+ undefined;
369
+
370
+ return lps.map(lp => {
371
+ return {
372
+ intermediary: lp,
373
+ quote: (async () => {
374
+ if(lp.services[SwapType.FROM_BTC]==null) throw new Error("LP service for processing from btc swaps not found!");
375
+
376
+ const abortController = extendAbortController(_abortController.signal);
377
+ const liquidityPromise: Promise<bigint | undefined> = this.preFetchIntermediaryLiquidity(amountData, lp, abortController);
378
+
379
+ try {
380
+ const {signDataPromise, resp} = await tryWithRetries(async(retryCount: number) => {
381
+ const {signDataPrefetch, response} = IntermediaryAPI.initFromBTC(
382
+ this.chainIdentifier, lp.url, nativeTokenAddress,
383
+ {
384
+ claimer: signer,
385
+ amount: amountData.amount,
386
+ token: amountData.token.toString(),
387
+
388
+ exactOut: !amountData.exactIn,
389
+ sequence,
390
+
391
+ claimerBounty: throwIfUndefined(claimerBountyPrefetchPromise),
392
+ feeRate: throwIfUndefined(feeRatePromise),
393
+ additionalParams
394
+ },
395
+ this.options.postRequestTimeout, abortController.signal, retryCount>0 ? false : undefined
396
+ );
397
+
398
+ return {
399
+ signDataPromise: _signDataPromise ?? this.preFetchSignData(signDataPrefetch),
400
+ resp: await response
401
+ };
402
+ }, undefined, e => e instanceof RequestError, abortController.signal);
403
+
404
+ const data: T["Data"] = new this.swapDataDeserializer(resp.data);
405
+ data.setClaimer(signer);
406
+
407
+ this.verifyReturnedData(signer, resp, amountData, lp, _options, data, sequence, (await claimerBountyPrefetchPromise)!, nativeTokenAddress);
408
+ const [pricingInfo, signatureExpiry] = await Promise.all([
409
+ //Get intermediary's liquidity
410
+ this.verifyReturnedPrice(
411
+ lp.services[SwapType.FROM_BTC], false, resp.amount, resp.total,
412
+ amountData.token, {}, pricePrefetchPromise, usdPricePrefetchPromise, abortController.signal
413
+ ),
414
+ this.verifyReturnedSignature(signer, data, resp, feeRatePromise, signDataPromise, abortController.signal),
415
+ this.verifyIntermediaryLiquidity(data.getAmount(), throwIfUndefined(liquidityPromise)),
416
+ ]);
417
+
418
+ const quote = new FromBTCSwap<T>(this, {
419
+ pricingInfo,
420
+ url: lp.url,
421
+ expiry: signatureExpiry,
422
+ swapFee: resp.swapFee,
423
+ swapFeeBtc: resp.swapFee * resp.amount / (data.getAmount() - resp.swapFee),
424
+ feeRate: (await feeRatePromise)!,
425
+ signatureData: resp,
426
+ data,
427
+ address: resp.btcAddress,
428
+ amount: resp.amount,
429
+ exactIn: amountData.exactIn ?? true,
430
+ requiredConfirmations: resp.confirmations
431
+ } as FromBTCSwapInit<T["Data"]>);
432
+ await quote._save();
433
+ return quote;
434
+ } catch (e) {
435
+ abortController.abort(e);
436
+ throw e;
437
+ }
438
+ })()
439
+ }
440
+ });
441
+ }
442
+
443
+ }