@atomiqlabs/sdk 8.6.4 → 8.6.6

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 (239) hide show
  1. package/dist/SmartChainAssets.d.ts +181 -181
  2. package/dist/SmartChainAssets.js +181 -181
  3. package/dist/bitcoin/coinselect2/accumulative.d.ts +6 -6
  4. package/dist/bitcoin/coinselect2/accumulative.js +51 -52
  5. package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -6
  6. package/dist/bitcoin/coinselect2/blackjack.js +37 -38
  7. package/dist/bitcoin/coinselect2/index.d.ts +17 -19
  8. package/dist/bitcoin/coinselect2/index.js +69 -69
  9. package/dist/bitcoin/coinselect2/utils.d.ts +75 -77
  10. package/dist/bitcoin/coinselect2/utils.js +123 -123
  11. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +128 -130
  12. package/dist/bitcoin/wallet/BitcoinWallet.js +322 -322
  13. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +78 -78
  14. package/dist/bitcoin/wallet/IBitcoinWallet.js +20 -21
  15. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +99 -101
  16. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +176 -176
  17. package/dist/enums/FeeType.d.ts +15 -15
  18. package/dist/enums/FeeType.js +19 -19
  19. package/dist/enums/SwapAmountType.d.ts +15 -15
  20. package/dist/enums/SwapAmountType.js +19 -19
  21. package/dist/enums/SwapDirection.d.ts +15 -15
  22. package/dist/enums/SwapDirection.js +19 -19
  23. package/dist/enums/SwapSide.d.ts +15 -15
  24. package/dist/enums/SwapSide.js +19 -19
  25. package/dist/enums/SwapType.d.ts +75 -75
  26. package/dist/enums/SwapType.js +79 -79
  27. package/dist/errors/IntermediaryError.d.ts +13 -13
  28. package/dist/errors/IntermediaryError.js +27 -27
  29. package/dist/errors/RequestError.d.ts +32 -32
  30. package/dist/errors/RequestError.js +54 -54
  31. package/dist/errors/UserError.d.ts +8 -8
  32. package/dist/errors/UserError.js +16 -16
  33. package/dist/events/UnifiedSwapEventListener.d.ts +23 -23
  34. package/dist/events/UnifiedSwapEventListener.js +130 -130
  35. package/dist/http/HttpUtils.d.ts +27 -27
  36. package/dist/http/HttpUtils.js +90 -91
  37. package/dist/http/paramcoders/IParamReader.d.ts +8 -8
  38. package/dist/http/paramcoders/IParamReader.js +2 -2
  39. package/dist/http/paramcoders/ParamDecoder.d.ts +42 -44
  40. package/dist/http/paramcoders/ParamDecoder.js +137 -137
  41. package/dist/http/paramcoders/ParamEncoder.d.ts +18 -20
  42. package/dist/http/paramcoders/ParamEncoder.js +36 -36
  43. package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -26
  44. package/dist/http/paramcoders/SchemaVerifier.js +145 -145
  45. package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -11
  46. package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -57
  47. package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +11 -13
  48. package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -26
  49. package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -16
  50. package/dist/http/paramcoders/client/StreamingFetchPromise.js +173 -174
  51. package/dist/index.d.ts +85 -85
  52. package/dist/index.js +158 -158
  53. package/dist/intermediaries/Intermediary.d.ts +157 -157
  54. package/dist/intermediaries/Intermediary.js +142 -142
  55. package/dist/intermediaries/IntermediaryDiscovery.d.ts +198 -199
  56. package/dist/intermediaries/IntermediaryDiscovery.js +406 -406
  57. package/dist/intermediaries/apis/IntermediaryAPI.d.ts +437 -438
  58. package/dist/intermediaries/apis/IntermediaryAPI.js +603 -602
  59. package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +155 -155
  60. package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +137 -137
  61. package/dist/lnurl/LNURL.d.ts +102 -102
  62. package/dist/lnurl/LNURL.js +321 -321
  63. package/dist/prices/RedundantSwapPrice.d.ts +110 -110
  64. package/dist/prices/RedundantSwapPrice.js +222 -222
  65. package/dist/prices/SingleSwapPrice.d.ts +34 -34
  66. package/dist/prices/SingleSwapPrice.js +44 -44
  67. package/dist/prices/SwapPriceWithChain.d.ts +107 -107
  68. package/dist/prices/SwapPriceWithChain.js +128 -128
  69. package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -28
  70. package/dist/prices/abstract/ICachedSwapPrice.js +62 -62
  71. package/dist/prices/abstract/IPriceProvider.d.ts +81 -81
  72. package/dist/prices/abstract/IPriceProvider.js +74 -74
  73. package/dist/prices/abstract/ISwapPrice.d.ts +168 -166
  74. package/dist/prices/abstract/ISwapPrice.js +279 -267
  75. package/dist/prices/providers/BinancePriceProvider.d.ts +23 -23
  76. package/dist/prices/providers/BinancePriceProvider.js +30 -30
  77. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +23 -23
  78. package/dist/prices/providers/CoinGeckoPriceProvider.js +29 -29
  79. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +25 -25
  80. package/dist/prices/providers/CoinPaprikaPriceProvider.js +29 -29
  81. package/dist/prices/providers/CustomPriceProvider.d.ts +24 -24
  82. package/dist/prices/providers/CustomPriceProvider.js +35 -35
  83. package/dist/prices/providers/KrakenPriceProvider.d.ts +38 -38
  84. package/dist/prices/providers/KrakenPriceProvider.js +45 -45
  85. package/dist/prices/providers/OKXPriceProvider.d.ts +34 -34
  86. package/dist/prices/providers/OKXPriceProvider.js +29 -29
  87. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +17 -17
  88. package/dist/prices/providers/abstract/ExchangePriceProvider.js +21 -21
  89. package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -7
  90. package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -12
  91. package/dist/storage/IUnifiedStorage.d.ts +85 -85
  92. package/dist/storage/IUnifiedStorage.js +2 -2
  93. package/dist/storage/UnifiedSwapStorage.d.ts +114 -114
  94. package/dist/storage/UnifiedSwapStorage.js +116 -116
  95. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +63 -63
  96. package/dist/storage-browser/IndexedDBUnifiedStorage.js +298 -298
  97. package/dist/storage-browser/LocalStorageManager.d.ts +49 -49
  98. package/dist/storage-browser/LocalStorageManager.js +93 -93
  99. package/dist/swapper/Swapper.d.ts +686 -687
  100. package/dist/swapper/Swapper.js +1603 -1603
  101. package/dist/swapper/SwapperFactory.d.ts +135 -135
  102. package/dist/swapper/SwapperFactory.js +162 -162
  103. package/dist/swapper/SwapperUtils.d.ts +200 -200
  104. package/dist/swapper/SwapperUtils.js +467 -467
  105. package/dist/swapper/SwapperWithChain.d.ts +404 -404
  106. package/dist/swapper/SwapperWithChain.js +469 -469
  107. package/dist/swapper/SwapperWithSigner.d.ts +322 -322
  108. package/dist/swapper/SwapperWithSigner.js +318 -318
  109. package/dist/swaps/IAddressSwap.d.ts +22 -22
  110. package/dist/swaps/IAddressSwap.js +13 -14
  111. package/dist/swaps/IBTCWalletSwap.d.ts +73 -73
  112. package/dist/swaps/IBTCWalletSwap.js +17 -18
  113. package/dist/swaps/IClaimableSwap.d.ts +49 -49
  114. package/dist/swaps/IClaimableSwap.js +14 -15
  115. package/dist/swaps/IClaimableSwapWrapper.d.ts +15 -15
  116. package/dist/swaps/IClaimableSwapWrapper.js +2 -2
  117. package/dist/swaps/IRefundableSwap.d.ts +43 -43
  118. package/dist/swaps/IRefundableSwap.js +13 -14
  119. package/dist/swaps/ISwap.d.ts +386 -387
  120. package/dist/swaps/ISwap.js +346 -341
  121. package/dist/swaps/ISwapWithGasDrop.d.ts +21 -21
  122. package/dist/swaps/ISwapWithGasDrop.js +11 -12
  123. package/dist/swaps/ISwapWrapper.d.ts +283 -284
  124. package/dist/swaps/ISwapWrapper.js +353 -353
  125. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +98 -98
  126. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +126 -126
  127. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +133 -135
  128. package/dist/swaps/escrow_swaps/IEscrowSwap.js +169 -169
  129. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +114 -115
  130. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +134 -134
  131. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +98 -101
  132. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +130 -130
  133. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +162 -162
  134. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +190 -190
  135. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +58 -58
  136. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +78 -78
  137. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +529 -531
  138. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +1285 -1285
  139. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +181 -184
  140. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +418 -417
  141. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +581 -583
  142. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +1371 -1371
  143. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +225 -228
  144. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +506 -506
  145. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +458 -458
  146. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +1126 -1126
  147. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +190 -191
  148. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +378 -377
  149. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +403 -403
  150. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +924 -924
  151. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +62 -62
  152. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +112 -112
  153. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +125 -127
  154. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +256 -256
  155. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +241 -242
  156. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +520 -520
  157. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +73 -73
  158. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +155 -155
  159. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +127 -128
  160. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +278 -278
  161. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +630 -630
  162. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1443 -1443
  163. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +213 -207
  164. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +756 -755
  165. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +261 -261
  166. package/dist/swaps/trusted/ln/LnForGasSwap.js +511 -511
  167. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +40 -40
  168. package/dist/swaps/trusted/ln/LnForGasWrapper.js +82 -82
  169. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +342 -342
  170. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +715 -715
  171. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +68 -69
  172. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +92 -92
  173. package/dist/types/AmountData.d.ts +10 -10
  174. package/dist/types/AmountData.js +2 -2
  175. package/dist/types/CustomPriceFunction.d.ts +11 -11
  176. package/dist/types/CustomPriceFunction.js +2 -2
  177. package/dist/types/PriceInfoType.d.ts +28 -28
  178. package/dist/types/PriceInfoType.js +56 -57
  179. package/dist/types/SwapExecutionAction.d.ts +88 -88
  180. package/dist/types/SwapExecutionAction.js +2 -2
  181. package/dist/types/SwapStateInfo.d.ts +5 -5
  182. package/dist/types/SwapStateInfo.js +2 -2
  183. package/dist/types/SwapWithSigner.d.ts +17 -17
  184. package/dist/types/SwapWithSigner.js +42 -43
  185. package/dist/types/Token.d.ts +99 -99
  186. package/dist/types/Token.js +76 -76
  187. package/dist/types/TokenAmount.d.ts +69 -69
  188. package/dist/types/TokenAmount.js +59 -60
  189. package/dist/types/fees/Fee.d.ts +50 -50
  190. package/dist/types/fees/Fee.js +2 -2
  191. package/dist/types/fees/FeeBreakdown.d.ts +11 -11
  192. package/dist/types/fees/FeeBreakdown.js +2 -2
  193. package/dist/types/fees/PercentagePPM.d.ts +17 -17
  194. package/dist/types/fees/PercentagePPM.js +17 -18
  195. package/dist/types/lnurl/LNURLPay.d.ts +61 -61
  196. package/dist/types/lnurl/LNURLPay.js +30 -31
  197. package/dist/types/lnurl/LNURLWithdraw.d.ts +48 -48
  198. package/dist/types/lnurl/LNURLWithdraw.js +26 -27
  199. package/dist/types/wallets/LightningInvoiceCreateService.d.ts +24 -24
  200. package/dist/types/wallets/LightningInvoiceCreateService.js +14 -15
  201. package/dist/types/wallets/MinimalBitcoinWalletInterface.d.ts +23 -23
  202. package/dist/types/wallets/MinimalBitcoinWalletInterface.js +2 -2
  203. package/dist/types/wallets/MinimalLightningNetworkWalletInterface.d.ts +9 -9
  204. package/dist/types/wallets/MinimalLightningNetworkWalletInterface.js +2 -2
  205. package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -1
  206. package/dist/utils/AutomaticClockDriftCorrection.js +69 -70
  207. package/dist/utils/BitcoinUtils.d.ts +12 -14
  208. package/dist/utils/BitcoinUtils.js +101 -102
  209. package/dist/utils/BitcoinWalletUtils.d.ts +7 -7
  210. package/dist/utils/BitcoinWalletUtils.js +13 -14
  211. package/dist/utils/Logger.d.ts +7 -7
  212. package/dist/utils/Logger.js +11 -12
  213. package/dist/utils/RetryUtils.d.ts +22 -22
  214. package/dist/utils/RetryUtils.js +66 -67
  215. package/dist/utils/SwapUtils.d.ts +88 -88
  216. package/dist/utils/SwapUtils.js +72 -72
  217. package/dist/utils/TimeoutUtils.d.ts +17 -17
  218. package/dist/utils/TimeoutUtils.js +54 -55
  219. package/dist/utils/TokenUtils.d.ts +19 -19
  220. package/dist/utils/TokenUtils.js +36 -37
  221. package/dist/utils/TypeUtils.d.ts +7 -7
  222. package/dist/utils/TypeUtils.js +2 -2
  223. package/dist/utils/Utils.d.ts +56 -58
  224. package/dist/utils/Utils.js +193 -194
  225. package/package.json +1 -1
  226. package/src/intermediaries/apis/IntermediaryAPI.ts +4 -2
  227. package/src/prices/abstract/ISwapPrice.ts +19 -6
  228. package/src/swaps/ISwap.ts +17 -6
  229. package/src/swaps/ISwapWrapper.ts +4 -3
  230. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +4 -2
  231. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +4 -1
  232. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +2 -2
  233. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +4 -2
  234. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +6 -6
  235. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +5 -5
  236. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +4 -1
  237. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +10 -2
  238. package/src/swaps/trusted/ln/LnForGasWrapper.ts +1 -1
  239. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +1 -1
@@ -259,7 +259,8 @@ export abstract class ISwapWrapper<
259
259
  amountToken: bigint,
260
260
  token: string,
261
261
  feeData: {
262
- networkFee?: bigint
262
+ networkFee?: bigint,
263
+ swapFeeBtc?: bigint
263
264
  },
264
265
  pricePrefetchPromise: Promise<bigint | undefined> = Promise.resolve(undefined),
265
266
  usdPricePrefetchPromise: Promise<number | undefined> = Promise.resolve(undefined),
@@ -271,8 +272,8 @@ export abstract class ISwapWrapper<
271
272
 
272
273
  const [isValidAmount, usdPrice] = await Promise.all([
273
274
  send ?
274
- this._prices.isValidAmountSend(this.chainIdentifier, amountSats, swapBaseFee, swapFeePPM, amountToken, token, abortSignal, await pricePrefetchPromise) :
275
- this._prices.isValidAmountReceive(this.chainIdentifier, amountSats, swapBaseFee, swapFeePPM, amountToken, token, abortSignal, await pricePrefetchPromise),
275
+ this._prices.isValidAmountSend(this.chainIdentifier, amountSats, swapBaseFee, swapFeePPM, amountToken, token, abortSignal, await pricePrefetchPromise, feeData.swapFeeBtc) :
276
+ this._prices.isValidAmountReceive(this.chainIdentifier, amountSats, swapBaseFee, swapFeePPM, amountToken, token, abortSignal, await pricePrefetchPromise, feeData.swapFeeBtc),
276
277
  usdPricePrefetchPromise.then(value => {
277
278
  if(value!=null) return value;
278
279
  return this._prices.preFetchUsdPrice(abortSignal);
@@ -334,12 +334,14 @@ export class FromBTCLNWrapper<
334
334
  if(decodedPr.timeExpireDate==null) throw new IntermediaryError("Invalid returned swap invoice, no expiry date field");
335
335
  const amountIn = (BigInt(decodedPr.millisatoshis) + 999n) / 1000n;
336
336
 
337
+ const swapFeeBtc = resp.swapFee * amountIn / (resp.total - resp.swapFee);
338
+
337
339
  try {
338
340
  this.verifyReturnedData(resp, amountData, lp, _options, decodedPr, paymentHash);
339
341
  const [pricingInfo] = await Promise.all([
340
342
  this.verifyReturnedPrice(
341
343
  lp.services[SwapType.FROM_BTCLN], false, amountIn, resp.total,
342
- amountData.token, {}, _preFetches.pricePrefetchPromise, _preFetches.usdPricePrefetchPromise, abortController.signal
344
+ amountData.token, {swapFeeBtc}, _preFetches.pricePrefetchPromise, _preFetches.usdPricePrefetchPromise, abortController.signal
343
345
  ),
344
346
  this.verifyIntermediaryLiquidity(resp.total, throwIfUndefined(liquidityPromise)),
345
347
  lnCapacityPromise!=null ? this.verifyLnNodeCapacity(lp, decodedPr, lnCapacityPromise, abortController.signal) : Promise.resolve()
@@ -350,7 +352,7 @@ export class FromBTCLNWrapper<
350
352
  url: lp.url,
351
353
  expiry: decodedPr.timeExpireDate*1000,
352
354
  swapFee: resp.swapFee,
353
- swapFeeBtc: resp.swapFee * amountIn / (resp.total - resp.swapFee),
355
+ swapFeeBtc,
354
356
  feeRate: (await _preFetches.feeRatePromise)!,
355
357
  initialSwapData: await this._contract.createSwapData(
356
358
  ChainSwapType.HTLC, lp.getAddress(this.chainIdentifier), recipient, amountData.token,
@@ -309,7 +309,10 @@ export class FromBTCLNAutoSwap<T extends ChainType = ChainType>
309
309
  this.pricingInfo.satsBaseFee,
310
310
  this.pricingInfo.feePPM,
311
311
  this.getOutputAmountWithoutFee(),
312
- this.getSwapData().getToken()
312
+ this.getSwapData().getToken(),
313
+ undefined,
314
+ undefined,
315
+ this.swapFeeBtc
313
316
  );
314
317
  this.pricingInfo.realPriceUsdPerBitcoin = usdPricePerBtc;
315
318
  }
@@ -457,13 +457,13 @@ export class FromBTCLNAutoWrapper<
457
457
  lp.services[SwapType.FROM_BTCLN_AUTO],
458
458
  false, resp.btcAmountSwap,
459
459
  resp.total,
460
- amountData.token, {}, _preFetches.pricePrefetchPromise, _preFetches.usdPricePrefetchPromise, abortController.signal
460
+ amountData.token, {swapFeeBtc: resp.swapFeeBtc}, _preFetches.pricePrefetchPromise, _preFetches.usdPricePrefetchPromise, abortController.signal
461
461
  ),
462
462
  _options.gasAmount===0n ? Promise.resolve(undefined) : this.verifyReturnedPrice(
463
463
  {...lp.services[SwapType.FROM_BTCLN_AUTO], swapBaseFee: 0}, //Base fee should be charged only on the amount, not on gas
464
464
  false, resp.btcAmountGas,
465
465
  resp.totalGas + resp.claimerBounty,
466
- nativeTokenAddress, {}, _preFetches.gasTokenPricePrefetchPromise, _preFetches.usdPricePrefetchPromise, abortController.signal
466
+ nativeTokenAddress, {swapFeeBtc: resp.gasSwapFeeBtc}, _preFetches.gasTokenPricePrefetchPromise, _preFetches.usdPricePrefetchPromise, abortController.signal
467
467
  ),
468
468
  this.verifyIntermediaryLiquidity(resp.total, throwIfUndefined(liquidityPromise)),
469
469
  _options.unsafeSkipLnNodeCheck ? Promise.resolve() : this.verifyLnNodeCapacity(lp, decodedPr, lnCapacityPromise, abortController.signal)
@@ -487,12 +487,14 @@ export class FromBTCWrapper<
487
487
  const data: T["Data"] = new this._swapDataDeserializer(resp.data);
488
488
  data.setClaimer(recipient);
489
489
 
490
+ const swapFeeBtc = resp.swapFee * resp.amount / (data.getAmount() - resp.swapFee);
491
+
490
492
  this.verifyReturnedData(recipient, resp, amountData, lp, _options, data, sequence, (await claimerBountyPrefetchPromise)!, nativeTokenAddress);
491
493
  const [pricingInfo, signatureExpiry] = await Promise.all([
492
494
  //Get intermediary's liquidity
493
495
  this.verifyReturnedPrice(
494
496
  lp.services[SwapType.FROM_BTC], false, resp.amount, resp.total,
495
- amountData.token, {}, pricePrefetchPromise, usdPricePrefetchPromise, abortController.signal
497
+ amountData.token, {swapFeeBtc}, pricePrefetchPromise, usdPricePrefetchPromise, abortController.signal
496
498
  ),
497
499
  this.verifyReturnedSignature(recipient, data, resp, feeRatePromise, signDataPromise, abortController.signal),
498
500
  this.verifyIntermediaryLiquidity(data.getAmount(), throwIfUndefined(liquidityPromise)),
@@ -503,7 +505,7 @@ export class FromBTCWrapper<
503
505
  url: lp.url,
504
506
  expiry: signatureExpiry,
505
507
  swapFee: resp.swapFee,
506
- swapFeeBtc: resp.swapFee * resp.amount / (data.getAmount() - resp.swapFee),
508
+ swapFeeBtc,
507
509
  feeRate: (await feeRatePromise)!,
508
510
  signatureData: resp,
509
511
  data,
@@ -309,10 +309,12 @@ export class ToBTCLNWrapper<T extends ChainType> extends IToBTCWrapper<T, ToBTCL
309
309
 
310
310
  await this.verifyReturnedData(signer, resp, parsedPr, amountData.token, lp, calculatedOptions, data);
311
311
 
312
+ const swapFeeBtc = resp.swapFee * amountOut / (data.getAmount() - totalFee);
313
+
312
314
  const [pricingInfo, signatureExpiry, reputation] = await Promise.all([
313
315
  this.verifyReturnedPrice(
314
316
  lp.services[SwapType.TO_BTCLN], true, amountOut, data.getAmount(),
315
- amountData.token, {networkFee: resp.maxFee},
317
+ amountData.token, {networkFee: resp.maxFee, swapFeeBtc},
316
318
  preFetches.pricePreFetchPromise, preFetches.usdPricePrefetchPromise, abortController.signal
317
319
  ),
318
320
  this.verifyReturnedSignature(
@@ -324,8 +326,6 @@ export class ToBTCLNWrapper<T extends ChainType> extends IToBTCWrapper<T, ToBTCL
324
326
 
325
327
  if(reputation!=null) lp.reputation[amountData.token.toString()] = reputation;
326
328
 
327
- const swapFeeBtc = resp.swapFee * amountOut / (data.getAmount() - totalFee);
328
-
329
329
  const quote = new ToBTCLNSwap<T>(this, {
330
330
  pricingInfo,
331
331
  url: lp.url,
@@ -512,10 +512,12 @@ export class ToBTCLNWrapper<T extends ChainType> extends IToBTCWrapper<T, ToBTCL
512
512
 
513
513
  await this.verifyReturnedData(signer, resp, parsedInvoice, amountData.token, lp, calculatedOptions, data, amountData.amount);
514
514
 
515
+ const swapFeeBtc = resp.swapFee * amountOut / (data.getAmount() - totalFee);
516
+
515
517
  const [pricingInfo, signatureExpiry, reputation] = await Promise.all([
516
518
  this.verifyReturnedPrice(
517
519
  lp.services[SwapType.TO_BTCLN], true, prepareResp.amount, data.getAmount(),
518
- amountData.token, {networkFee: resp.maxFee},
520
+ amountData.token, {networkFee: resp.maxFee, swapFeeBtc},
519
521
  preFetches.pricePreFetchPromise, preFetches.usdPricePrefetchPromise, abortSignal
520
522
  ),
521
523
  this.verifyReturnedSignature(
@@ -527,8 +529,6 @@ export class ToBTCLNWrapper<T extends ChainType> extends IToBTCWrapper<T, ToBTCL
527
529
 
528
530
  if(reputation!=null) lp.reputation[amountData.token.toString()] = reputation;
529
531
 
530
- const swapFeeBtc = resp.swapFee * amountOut / (data.getAmount() - totalFee);
531
-
532
532
  const quote = new ToBTCLNSwap<T>(this, {
533
533
  pricingInfo,
534
534
  url: lp.url,
@@ -289,11 +289,15 @@ export class ToBTCWrapper<T extends ChainType> extends IToBTCWrapper<T, ToBTCDef
289
289
  const data: T["Data"] = new this._swapDataDeserializer(resp.data);
290
290
  data.setOfferer(signer);
291
291
 
292
+ const inputWithoutFees = data.getAmount() - resp.swapFee - resp.networkFee;
293
+ const swapFeeBtc = resp.swapFee * resp.amount / inputWithoutFees;
294
+ const networkFeeBtc = resp.networkFee * resp.amount / inputWithoutFees;
295
+
292
296
  this.verifyReturnedData(signer, resp, amountData, lp, _options, data, hash);
293
297
  const [pricingInfo, signatureExpiry, reputation] = await Promise.all([
294
298
  this.verifyReturnedPrice(
295
299
  lp.services[SwapType.TO_BTC], true, resp.amount, data.getAmount(),
296
- amountData.token, resp, pricePreFetchPromise, usdPricePrefetchPromise, abortController.signal
300
+ amountData.token, {networkFee: resp.networkFee, swapFeeBtc}, pricePreFetchPromise, usdPricePrefetchPromise, abortController.signal
297
301
  ),
298
302
  this.verifyReturnedSignature(signer, data, resp, feeRatePromise, signDataPromise, abortController.signal),
299
303
  reputationPromise
@@ -302,10 +306,6 @@ export class ToBTCWrapper<T extends ChainType> extends IToBTCWrapper<T, ToBTCDef
302
306
 
303
307
  if(reputation!=null) lp.reputation[amountData.token.toString()] = reputation;
304
308
 
305
- const inputWithoutFees = data.getAmount() - resp.swapFee - resp.networkFee;
306
- const swapFeeBtc = resp.swapFee * resp.amount / inputWithoutFees;
307
- const networkFeeBtc = resp.networkFee * resp.amount / inputWithoutFees
308
-
309
309
  const quote = new ToBTCSwap<T>(this, {
310
310
  pricingInfo,
311
311
  url: lp.url,
@@ -398,7 +398,10 @@ export class SpvFromBTCSwap<T extends ChainType>
398
398
  this.pricingInfo.satsBaseFee,
399
399
  this.pricingInfo.feePPM,
400
400
  this.getOutputWithoutFee().rawAmount,
401
- this.outputSwapToken
401
+ this.outputSwapToken,
402
+ undefined,
403
+ undefined,
404
+ this.swapFeeBtc
402
405
  );
403
406
  this.pricingInfo.realPriceUsdPerBitcoin = usdPricePerBtc;
404
407
  }
@@ -68,6 +68,13 @@ export type SpvFromBTCOptions = {
68
68
  * the settlement gas fee cost)
69
69
  */
70
70
  feeSafetyFactor?: number,
71
+ /**
72
+ * Instruct the LP to create a "sticky address" for your destination wallet address. After the first successful
73
+ * swap with that LP, the used bitcoin address will be permanently linked to your destination wallet address. So
74
+ * all subsequent swaps to the same address will yield the same LP deposit bitcoin address. Useful for corporate
75
+ * whitelist-only wallets
76
+ */
77
+ stickyAddress?: boolean,
71
78
 
72
79
  /**
73
80
  * @deprecated Use `maxAllowedBitcoinFeeRate` instead!
@@ -633,6 +640,7 @@ export class SpvFromBTCWrapper<
633
640
  gasAmount: _options.gasAmount,
634
641
  callerFeeRate: throwIfUndefined(callerFeePrefetchPromise, "Caller fee prefetch failed!"),
635
642
  frontingFeeRate: 0n,
643
+ stickyAddress: options?.stickyAddress,
636
644
  additionalParams
637
645
  },
638
646
  this._options.postRequestTimeout, abortController.signal, retryCount>0 ? false : undefined
@@ -652,13 +660,13 @@ export class SpvFromBTCWrapper<
652
660
  lp.services[SwapType.SPV_VAULT_FROM_BTC],
653
661
  false, resp.btcAmountSwap,
654
662
  resp.total * (100_000n + callerFeeShare) / 100_000n,
655
- amountData.token, {}, pricePrefetchPromise, usdPricePrefetchPromise, abortController.signal
663
+ amountData.token, {swapFeeBtc: resp.swapFeeBtc}, pricePrefetchPromise, usdPricePrefetchPromise, abortController.signal
656
664
  ),
657
665
  _options.gasAmount===0n ? Promise.resolve(undefined) : this.verifyReturnedPrice(
658
666
  {...lp.services[SwapType.SPV_VAULT_FROM_BTC], swapBaseFee: 0}, //Base fee should be charged only on the amount, not on gas
659
667
  false, resp.btcAmountGas,
660
668
  resp.totalGas * (100_000n + callerFeeShare) / 100_000n,
661
- nativeTokenAddress, {}, gasTokenPricePrefetchPromise, usdPricePrefetchPromise, abortController.signal
669
+ nativeTokenAddress, {swapFeeBtc: resp.gasSwapFeeBtc}, gasTokenPricePrefetchPromise, usdPricePrefetchPromise, abortController.signal
662
670
  ),
663
671
  this.verifyReturnedData(resp, amountData, lp, _options, callerFeeShare, bitcoinFeeRatePromise, abortController.signal)
664
672
  ]);
@@ -68,7 +68,7 @@ export class LnForGasWrapper<T extends ChainType> extends ISwapWrapper<T, LnForG
68
68
  {swapFeePPM: 10000, swapBaseFee: 10} :
69
69
  lpOrUrl.services[SwapType.TRUSTED_FROM_BTCLN],
70
70
  false, amountIn,
71
- amount, token, {}
71
+ amount, token, {swapFeeBtc: resp.swapFeeSats}
72
72
  );
73
73
 
74
74
  const quoteInit: LnForGasSwapInit = {
@@ -105,7 +105,7 @@ export class OnchainForGasWrapper<T extends ChainType> extends ISwapWrapper<T, O
105
105
  {swapFeePPM: 10000, swapBaseFee: 10} :
106
106
  lpOrUrl.services[SwapType.TRUSTED_FROM_BTC],
107
107
  false, resp.amountSats,
108
- amount, this._chain.getNativeCurrencyAddress(), {}
108
+ amount, this._chain.getNativeCurrencyAddress(), {swapFeeBtc: resp.swapFeeSats}
109
109
  );
110
110
 
111
111
  const quote = new OnchainForGasSwap(this, {