@atomiqlabs/sdk 8.7.7 → 8.8.4

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 (339) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +1760 -1760
  3. package/dist/SmartChainAssets.d.ts +181 -181
  4. package/dist/SmartChainAssets.js +181 -181
  5. package/dist/bitcoin/coinselect2/accumulative.d.ts +7 -6
  6. package/dist/bitcoin/coinselect2/accumulative.js +52 -52
  7. package/dist/bitcoin/coinselect2/blackjack.d.ts +7 -6
  8. package/dist/bitcoin/coinselect2/blackjack.js +38 -38
  9. package/dist/bitcoin/coinselect2/index.d.ts +20 -19
  10. package/dist/bitcoin/coinselect2/index.js +69 -69
  11. package/dist/bitcoin/coinselect2/utils.d.ts +82 -77
  12. package/dist/bitcoin/coinselect2/utils.js +158 -123
  13. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +113 -130
  14. package/dist/bitcoin/wallet/BitcoinWallet.js +335 -322
  15. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +116 -78
  16. package/dist/bitcoin/wallet/IBitcoinWallet.js +21 -21
  17. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +106 -101
  18. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +196 -190
  19. package/dist/enums/FeeType.d.ts +15 -15
  20. package/dist/enums/FeeType.js +19 -19
  21. package/dist/enums/SwapAmountType.d.ts +15 -15
  22. package/dist/enums/SwapAmountType.js +19 -19
  23. package/dist/enums/SwapDirection.d.ts +15 -15
  24. package/dist/enums/SwapDirection.js +19 -19
  25. package/dist/enums/SwapSide.d.ts +15 -15
  26. package/dist/enums/SwapSide.js +19 -19
  27. package/dist/enums/SwapType.d.ts +75 -75
  28. package/dist/enums/SwapType.js +79 -79
  29. package/dist/errors/IntermediaryError.d.ts +13 -13
  30. package/dist/errors/IntermediaryError.js +27 -27
  31. package/dist/errors/RequestError.d.ts +32 -32
  32. package/dist/errors/RequestError.js +54 -54
  33. package/dist/errors/UserError.d.ts +8 -8
  34. package/dist/errors/UserError.js +16 -16
  35. package/dist/events/UnifiedSwapEventListener.d.ts +23 -23
  36. package/dist/events/UnifiedSwapEventListener.js +132 -132
  37. package/dist/http/HttpUtils.d.ts +27 -27
  38. package/dist/http/HttpUtils.js +91 -91
  39. package/dist/http/paramcoders/IParamReader.d.ts +8 -8
  40. package/dist/http/paramcoders/IParamReader.js +2 -2
  41. package/dist/http/paramcoders/ParamDecoder.d.ts +44 -44
  42. package/dist/http/paramcoders/ParamDecoder.js +137 -137
  43. package/dist/http/paramcoders/ParamEncoder.d.ts +20 -20
  44. package/dist/http/paramcoders/ParamEncoder.js +36 -36
  45. package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -26
  46. package/dist/http/paramcoders/SchemaVerifier.js +145 -145
  47. package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -11
  48. package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -57
  49. package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -13
  50. package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -26
  51. package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -16
  52. package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -174
  53. package/dist/index.d.ts +85 -85
  54. package/dist/index.js +158 -158
  55. package/dist/intermediaries/Intermediary.d.ts +178 -178
  56. package/dist/intermediaries/Intermediary.js +166 -166
  57. package/dist/intermediaries/IntermediaryDiscovery.d.ts +211 -211
  58. package/dist/intermediaries/IntermediaryDiscovery.js +424 -424
  59. package/dist/intermediaries/apis/IntermediaryAPI.d.ts +450 -440
  60. package/dist/intermediaries/apis/IntermediaryAPI.js +618 -603
  61. package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +155 -155
  62. package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +137 -137
  63. package/dist/lnurl/LNURL.d.ts +102 -102
  64. package/dist/lnurl/LNURL.js +321 -321
  65. package/dist/prices/RedundantSwapPrice.d.ts +110 -110
  66. package/dist/prices/RedundantSwapPrice.js +222 -222
  67. package/dist/prices/SingleSwapPrice.d.ts +34 -34
  68. package/dist/prices/SingleSwapPrice.js +44 -44
  69. package/dist/prices/SwapPriceWithChain.d.ts +107 -107
  70. package/dist/prices/SwapPriceWithChain.js +128 -128
  71. package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -28
  72. package/dist/prices/abstract/ICachedSwapPrice.js +62 -62
  73. package/dist/prices/abstract/IPriceProvider.d.ts +81 -81
  74. package/dist/prices/abstract/IPriceProvider.js +74 -74
  75. package/dist/prices/abstract/ISwapPrice.d.ts +168 -168
  76. package/dist/prices/abstract/ISwapPrice.js +279 -279
  77. package/dist/prices/providers/BinancePriceProvider.d.ts +23 -23
  78. package/dist/prices/providers/BinancePriceProvider.js +30 -30
  79. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +23 -23
  80. package/dist/prices/providers/CoinGeckoPriceProvider.js +29 -29
  81. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +25 -25
  82. package/dist/prices/providers/CoinPaprikaPriceProvider.js +29 -29
  83. package/dist/prices/providers/CustomPriceProvider.d.ts +24 -24
  84. package/dist/prices/providers/CustomPriceProvider.js +35 -35
  85. package/dist/prices/providers/KrakenPriceProvider.d.ts +38 -38
  86. package/dist/prices/providers/KrakenPriceProvider.js +45 -45
  87. package/dist/prices/providers/OKXPriceProvider.d.ts +34 -34
  88. package/dist/prices/providers/OKXPriceProvider.js +29 -29
  89. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +17 -17
  90. package/dist/prices/providers/abstract/ExchangePriceProvider.js +21 -21
  91. package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -7
  92. package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -12
  93. package/dist/storage/IUnifiedStorage.d.ts +85 -85
  94. package/dist/storage/IUnifiedStorage.js +2 -2
  95. package/dist/storage/UnifiedSwapStorage.d.ts +114 -114
  96. package/dist/storage/UnifiedSwapStorage.js +116 -116
  97. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +63 -63
  98. package/dist/storage-browser/IndexedDBUnifiedStorage.js +298 -298
  99. package/dist/storage-browser/LocalStorageManager.d.ts +49 -49
  100. package/dist/storage-browser/LocalStorageManager.js +93 -93
  101. package/dist/swapper/Swapper.d.ts +732 -692
  102. package/dist/swapper/Swapper.js +1713 -1657
  103. package/dist/swapper/SwapperFactory.d.ts +135 -135
  104. package/dist/swapper/SwapperFactory.js +162 -162
  105. package/dist/swapper/SwapperUtils.d.ts +206 -206
  106. package/dist/swapper/SwapperUtils.js +481 -481
  107. package/dist/swapper/SwapperWithChain.d.ts +404 -404
  108. package/dist/swapper/SwapperWithChain.js +469 -469
  109. package/dist/swapper/SwapperWithSigner.d.ts +322 -322
  110. package/dist/swapper/SwapperWithSigner.js +318 -318
  111. package/dist/swaps/IAddressSwap.d.ts +22 -22
  112. package/dist/swaps/IAddressSwap.js +14 -14
  113. package/dist/swaps/IBTCWalletSwap.d.ts +73 -73
  114. package/dist/swaps/IBTCWalletSwap.js +18 -18
  115. package/dist/swaps/IClaimableSwap.d.ts +49 -49
  116. package/dist/swaps/IClaimableSwap.js +15 -15
  117. package/dist/swaps/IClaimableSwapWrapper.d.ts +15 -15
  118. package/dist/swaps/IClaimableSwapWrapper.js +2 -2
  119. package/dist/swaps/IRefundableSwap.d.ts +43 -43
  120. package/dist/swaps/IRefundableSwap.js +14 -14
  121. package/dist/swaps/ISwap.d.ts +392 -392
  122. package/dist/swaps/ISwap.js +349 -349
  123. package/dist/swaps/ISwapWithGasDrop.d.ts +21 -21
  124. package/dist/swaps/ISwapWithGasDrop.js +12 -12
  125. package/dist/swaps/ISwapWrapper.d.ts +285 -285
  126. package/dist/swaps/ISwapWrapper.js +353 -353
  127. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +98 -98
  128. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +126 -126
  129. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +139 -139
  130. package/dist/swaps/escrow_swaps/IEscrowSwap.js +170 -170
  131. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +128 -128
  132. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +167 -167
  133. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +105 -105
  134. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +129 -129
  135. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +162 -162
  136. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +190 -190
  137. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +64 -64
  138. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +82 -82
  139. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +531 -531
  140. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +1285 -1285
  141. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +190 -190
  142. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +432 -432
  143. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +583 -583
  144. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +1371 -1371
  145. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +235 -235
  146. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +525 -525
  147. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +458 -458
  148. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +1126 -1126
  149. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +202 -202
  150. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +406 -406
  151. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +403 -403
  152. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +924 -924
  153. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +68 -68
  154. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +117 -117
  155. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +127 -127
  156. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +256 -256
  157. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +251 -251
  158. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +536 -536
  159. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +73 -73
  160. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +155 -155
  161. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +132 -132
  162. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +286 -286
  163. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +637 -631
  164. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1448 -1444
  165. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +257 -225
  166. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +947 -822
  167. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +261 -261
  168. package/dist/swaps/trusted/ln/LnForGasSwap.js +511 -511
  169. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +40 -40
  170. package/dist/swaps/trusted/ln/LnForGasWrapper.js +83 -83
  171. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +342 -342
  172. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +715 -715
  173. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +69 -69
  174. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +93 -93
  175. package/dist/types/AmountData.d.ts +10 -10
  176. package/dist/types/AmountData.js +2 -2
  177. package/dist/types/CustomPriceFunction.d.ts +11 -11
  178. package/dist/types/CustomPriceFunction.js +2 -2
  179. package/dist/types/PriceInfoType.d.ts +28 -28
  180. package/dist/types/PriceInfoType.js +57 -57
  181. package/dist/types/SwapExecutionAction.d.ts +88 -88
  182. package/dist/types/SwapExecutionAction.js +2 -2
  183. package/dist/types/SwapStateInfo.d.ts +5 -5
  184. package/dist/types/SwapStateInfo.js +2 -2
  185. package/dist/types/SwapWithSigner.d.ts +17 -17
  186. package/dist/types/SwapWithSigner.js +43 -43
  187. package/dist/types/Token.d.ts +99 -99
  188. package/dist/types/Token.js +76 -76
  189. package/dist/types/TokenAmount.d.ts +69 -69
  190. package/dist/types/TokenAmount.js +60 -60
  191. package/dist/types/fees/Fee.d.ts +50 -50
  192. package/dist/types/fees/Fee.js +2 -2
  193. package/dist/types/fees/FeeBreakdown.d.ts +11 -11
  194. package/dist/types/fees/FeeBreakdown.js +2 -2
  195. package/dist/types/fees/PercentagePPM.d.ts +17 -17
  196. package/dist/types/fees/PercentagePPM.js +18 -18
  197. package/dist/types/lnurl/LNURLPay.d.ts +61 -61
  198. package/dist/types/lnurl/LNURLPay.js +31 -31
  199. package/dist/types/lnurl/LNURLWithdraw.d.ts +48 -48
  200. package/dist/types/lnurl/LNURLWithdraw.js +27 -27
  201. package/dist/types/wallets/LightningInvoiceCreateService.d.ts +24 -24
  202. package/dist/types/wallets/LightningInvoiceCreateService.js +15 -15
  203. package/dist/types/wallets/MinimalBitcoinWalletInterface.d.ts +23 -23
  204. package/dist/types/wallets/MinimalBitcoinWalletInterface.js +2 -2
  205. package/dist/types/wallets/MinimalLightningNetworkWalletInterface.d.ts +9 -9
  206. package/dist/types/wallets/MinimalLightningNetworkWalletInterface.js +2 -2
  207. package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -1
  208. package/dist/utils/AutomaticClockDriftCorrection.js +70 -70
  209. package/dist/utils/BitcoinUtils.d.ts +16 -14
  210. package/dist/utils/BitcoinUtils.js +141 -102
  211. package/dist/utils/BitcoinWalletUtils.d.ts +7 -7
  212. package/dist/utils/BitcoinWalletUtils.js +14 -14
  213. package/dist/utils/Logger.d.ts +7 -7
  214. package/dist/utils/Logger.js +12 -12
  215. package/dist/utils/RetryUtils.d.ts +22 -22
  216. package/dist/utils/RetryUtils.js +67 -67
  217. package/dist/utils/SwapUtils.d.ts +88 -88
  218. package/dist/utils/SwapUtils.js +72 -72
  219. package/dist/utils/TimeoutUtils.d.ts +17 -17
  220. package/dist/utils/TimeoutUtils.js +55 -55
  221. package/dist/utils/TokenUtils.d.ts +19 -19
  222. package/dist/utils/TokenUtils.js +37 -37
  223. package/dist/utils/TypeUtils.d.ts +7 -7
  224. package/dist/utils/TypeUtils.js +2 -2
  225. package/dist/utils/Utils.d.ts +67 -67
  226. package/dist/utils/Utils.js +208 -208
  227. package/package.json +43 -43
  228. package/src/SmartChainAssets.ts +186 -186
  229. package/src/bitcoin/coinselect2/accumulative.ts +69 -68
  230. package/src/bitcoin/coinselect2/blackjack.ts +50 -49
  231. package/src/bitcoin/coinselect2/index.ts +93 -92
  232. package/src/bitcoin/coinselect2/utils.ts +236 -195
  233. package/src/bitcoin/wallet/BitcoinWallet.ts +439 -427
  234. package/src/bitcoin/wallet/IBitcoinWallet.ts +140 -99
  235. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +225 -217
  236. package/src/enums/FeeType.ts +15 -15
  237. package/src/enums/SwapAmountType.ts +16 -16
  238. package/src/enums/SwapDirection.ts +15 -15
  239. package/src/enums/SwapSide.ts +16 -16
  240. package/src/enums/SwapType.ts +75 -75
  241. package/src/errors/IntermediaryError.ts +28 -28
  242. package/src/errors/RequestError.ts +64 -64
  243. package/src/errors/UserError.ts +15 -15
  244. package/src/events/UnifiedSwapEventListener.ts +173 -173
  245. package/src/http/HttpUtils.ts +91 -91
  246. package/src/http/paramcoders/IParamReader.ts +9 -9
  247. package/src/http/paramcoders/ParamDecoder.ts +145 -145
  248. package/src/http/paramcoders/ParamEncoder.ts +40 -40
  249. package/src/http/paramcoders/SchemaVerifier.ts +153 -153
  250. package/src/http/paramcoders/client/ResponseParamDecoder.ts +57 -57
  251. package/src/http/paramcoders/client/StreamParamEncoder.ts +28 -28
  252. package/src/http/paramcoders/client/StreamingFetchPromise.ts +192 -192
  253. package/src/index.ts +140 -140
  254. package/src/intermediaries/Intermediary.ts +280 -280
  255. package/src/intermediaries/IntermediaryDiscovery.ts +541 -541
  256. package/src/intermediaries/apis/IntermediaryAPI.ts +963 -947
  257. package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -257
  258. package/src/lnurl/LNURL.ts +402 -402
  259. package/src/prices/RedundantSwapPrice.ts +264 -264
  260. package/src/prices/SingleSwapPrice.ts +50 -50
  261. package/src/prices/SwapPriceWithChain.ts +194 -194
  262. package/src/prices/abstract/ICachedSwapPrice.ts +85 -85
  263. package/src/prices/abstract/IPriceProvider.ts +127 -127
  264. package/src/prices/abstract/ISwapPrice.ts +390 -390
  265. package/src/prices/providers/BinancePriceProvider.ts +48 -48
  266. package/src/prices/providers/CoinGeckoPriceProvider.ts +46 -46
  267. package/src/prices/providers/CoinPaprikaPriceProvider.ts +49 -49
  268. package/src/prices/providers/CustomPriceProvider.ts +40 -40
  269. package/src/prices/providers/KrakenPriceProvider.ts +83 -83
  270. package/src/prices/providers/OKXPriceProvider.ts +59 -59
  271. package/src/prices/providers/abstract/ExchangePriceProvider.ts +31 -31
  272. package/src/prices/providers/abstract/HttpPriceProvider.ts +14 -14
  273. package/src/storage/IUnifiedStorage.ts +95 -95
  274. package/src/storage/UnifiedSwapStorage.ts +141 -141
  275. package/src/storage-browser/IndexedDBUnifiedStorage.ts +350 -350
  276. package/src/storage-browser/LocalStorageManager.ts +106 -106
  277. package/src/swapper/Swapper.ts +2488 -2416
  278. package/src/swapper/SwapperFactory.ts +307 -307
  279. package/src/swapper/SwapperUtils.ts +570 -570
  280. package/src/swapper/SwapperWithChain.ts +707 -707
  281. package/src/swapper/SwapperWithSigner.ts +511 -511
  282. package/src/swaps/IAddressSwap.ts +30 -30
  283. package/src/swaps/IBTCWalletSwap.ts +92 -92
  284. package/src/swaps/IClaimableSwap.ts +65 -65
  285. package/src/swaps/IClaimableSwapWrapper.ts +17 -17
  286. package/src/swaps/IRefundableSwap.ts +58 -58
  287. package/src/swaps/ISwap.ts +703 -703
  288. package/src/swaps/ISwapWithGasDrop.ts +25 -25
  289. package/src/swaps/ISwapWrapper.ts +539 -539
  290. package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +217 -217
  291. package/src/swaps/escrow_swaps/IEscrowSwap.ts +269 -269
  292. package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +282 -282
  293. package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +169 -169
  294. package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +300 -300
  295. package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +107 -107
  296. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1473 -1474
  297. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +601 -601
  298. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1582 -1582
  299. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +750 -750
  300. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +1299 -1299
  301. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +610 -610
  302. package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +1096 -1096
  303. package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +138 -138
  304. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +304 -304
  305. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +786 -786
  306. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +206 -206
  307. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +401 -401
  308. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1812 -1799
  309. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +1236 -1060
  310. package/src/swaps/trusted/ln/LnForGasSwap.ts +589 -589
  311. package/src/swaps/trusted/ln/LnForGasWrapper.ts +91 -91
  312. package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +862 -862
  313. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +131 -131
  314. package/src/types/AmountData.ts +9 -9
  315. package/src/types/CustomPriceFunction.ts +11 -11
  316. package/src/types/PriceInfoType.ts +66 -66
  317. package/src/types/SwapExecutionAction.ts +99 -99
  318. package/src/types/SwapStateInfo.ts +6 -6
  319. package/src/types/SwapWithSigner.ts +61 -61
  320. package/src/types/Token.ts +163 -163
  321. package/src/types/TokenAmount.ts +132 -132
  322. package/src/types/fees/Fee.ts +56 -56
  323. package/src/types/fees/FeeBreakdown.ts +11 -11
  324. package/src/types/fees/PercentagePPM.ts +26 -26
  325. package/src/types/lnurl/LNURLPay.ts +79 -79
  326. package/src/types/lnurl/LNURLWithdraw.ts +61 -61
  327. package/src/types/wallets/LightningInvoiceCreateService.ts +30 -30
  328. package/src/types/wallets/MinimalBitcoinWalletInterface.ts +21 -21
  329. package/src/types/wallets/MinimalLightningNetworkWalletInterface.ts +9 -9
  330. package/src/utils/AutomaticClockDriftCorrection.ts +71 -71
  331. package/src/utils/BitcoinUtils.ts +132 -91
  332. package/src/utils/BitcoinWalletUtils.ts +15 -15
  333. package/src/utils/Logger.ts +14 -14
  334. package/src/utils/RetryUtils.ts +78 -78
  335. package/src/utils/SwapUtils.ts +99 -99
  336. package/src/utils/TimeoutUtils.ts +49 -49
  337. package/src/utils/TokenUtils.ts +33 -33
  338. package/src/utils/TypeUtils.ts +8 -8
  339. package/src/utils/Utils.ts +212 -212
@@ -1,390 +1,390 @@
1
- import {ChainIds, MultiChain} from "../../swapper/Swapper";
2
- import {Token} from "../../types/Token";
3
- import {PriceInfoType} from "../../types/PriceInfoType";
4
-
5
- /**
6
- * Abstract base class for swap pricing implementations
7
- *
8
- * @category Pricing
9
- */
10
- export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
11
-
12
- maxAllowedFeeDifferencePPM: bigint;
13
-
14
- protected constructor(maxAllowedFeeDifferencePPM: bigint) {
15
- this.maxAllowedFeeDifferencePPM = maxAllowedFeeDifferencePPM;
16
- }
17
-
18
- /**
19
- * Gets the decimal places for a given token, returns `-1` if token should be ignored & `null` if token is not found
20
- *
21
- * @param chainIdentifier Chain identifier of the smart chain
22
- * @param tokenAddress Token address
23
- * @protected
24
- */
25
- protected abstract getDecimals<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string): number | null;
26
-
27
- /**
28
- * Returns the price of the token in BTC uSats (microSats)
29
- *
30
- * @param chainIdentifier Chain identifier of the smart chain
31
- * @param tokenAddress Token address
32
- * @param abortSignal
33
- * @protected
34
- */
35
- protected abstract getPrice<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string, abortSignal?: AbortSignal): Promise<bigint>;
36
-
37
- /**
38
- * Returns the price of bitcoin in USD (sats/USD)
39
- *
40
- * @param abortSignal
41
- * @protected
42
- */
43
- protected abstract getUsdPrice(abortSignal?: AbortSignal): Promise<number>;
44
-
45
- /**
46
- * Gets the decimal places for a given token, returns `-1` if token should be ignored & throws if token is not found
47
- *
48
- * @param chainIdentifier Chain identifier of the smart chain
49
- * @param tokenAddress Token address
50
- * @throws {Error} When token is not known
51
- * @protected
52
- */
53
- protected getDecimalsThrowing<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string): number {
54
- const decimals = this.getDecimals(chainIdentifier, tokenAddress);
55
- if(decimals==null) throw new Error(`Cannot get decimal count for token ${chainIdentifier}:${tokenAddress}!`);
56
- return decimals;
57
- }
58
-
59
- /**
60
- * Recomputes pricing info without fetching the current price
61
- *
62
- * @param chainIdentifier Chain identifier of the smart chain
63
- * @param amountSats Amount of sats (BTC) to be received from the swap
64
- * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
65
- * @param feePPM PPM fee rate as reported by the intermediary
66
- * @param paidToken Amount of token to be paid to the swap
67
- * @param tokenAddress Token address to be paid
68
- */
69
- public recomputePriceInfoSend<C extends ChainIds<T>>(
70
- chainIdentifier: C,
71
- amountSats: bigint,
72
- satsBaseFee: bigint,
73
- feePPM: bigint,
74
- paidToken: bigint,
75
- tokenAddress: string
76
- ): PriceInfoType {
77
- const totalSats = (amountSats * (1000000n + feePPM) / 1000000n)
78
- + satsBaseFee;
79
- const totalUSats = totalSats * 1000000n;
80
- const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / paidToken;
81
-
82
- return {
83
- isValid: true,
84
- differencePPM: 0n,
85
- satsBaseFee,
86
- feePPM,
87
- realPriceUSatPerToken: this.shouldIgnore(chainIdentifier, tokenAddress) ? undefined : swapPriceUSatPerToken,
88
- swapPriceUSatPerToken
89
- };
90
- }
91
-
92
- /**
93
- * Checks whether the swap amounts are valid given the current market rate for a given pair
94
- *
95
- * @param chainIdentifier Chain identifier of the smart chain
96
- * @param amountSats Amount of sats (BTC) to be received from the swap
97
- * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
98
- * @param feePPM PPM fee rate as reported by the intermediary
99
- * @param paidToken Amount of token to be paid to the swap
100
- * @param tokenAddress Token address to be paid
101
- * @param abortSignal
102
- * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
103
- * @param realSwapFeeSats
104
- */
105
- public async isValidAmountSend<C extends ChainIds<T>>(
106
- chainIdentifier: C,
107
- amountSats: bigint,
108
- satsBaseFee: bigint,
109
- feePPM: bigint,
110
- paidToken: bigint,
111
- tokenAddress: string,
112
- abortSignal?: AbortSignal,
113
- preFetchedPrice?: bigint | null,
114
- realSwapFeeSats?: bigint
115
- ): Promise<PriceInfoType> {
116
- if(realSwapFeeSats!=undefined && realSwapFeeSats<0) throw new Error("Invalid swap fee! Swap fee cannot be negative!");
117
- const totalSats = realSwapFeeSats!=undefined
118
- ? amountSats + realSwapFeeSats
119
- : (amountSats * (1000000n + feePPM) / 1000000n) + satsBaseFee;
120
- const totalUSats = totalSats * 1000000n;
121
-
122
- const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / paidToken;
123
-
124
- if(this.shouldIgnore(chainIdentifier, tokenAddress)) return {
125
- isValid: true,
126
- differencePPM: 0n,
127
- satsBaseFee,
128
- feePPM,
129
- realPriceUSatPerToken: undefined,
130
- swapPriceUSatPerToken
131
- };
132
-
133
- const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats, tokenAddress, abortSignal, preFetchedPrice);
134
- const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / calculatedAmtInToken;
135
-
136
- const difference = paidToken - calculatedAmtInToken; //Will be >0 if we need to pay more than we should've
137
- const differencePPM = difference * 1000000n / calculatedAmtInToken;
138
-
139
- return {
140
- isValid: differencePPM <= this.maxAllowedFeeDifferencePPM,
141
- differencePPM,
142
- satsBaseFee,
143
- feePPM,
144
- realPriceUSatPerToken,
145
- swapPriceUSatPerToken
146
- };
147
- }
148
-
149
- /**
150
- * Recomputes pricing info without fetching the current price
151
- *
152
- * @param chainIdentifier Chain identifier of the smart chain
153
- * @param amountSats Amount of sats (BTC) to be paid to the swap
154
- * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
155
- * @param feePPM PPM fee rate as reported by the intermediary
156
- * @param receiveToken Amount of token to be received from the swap
157
- * @param tokenAddress Token address to be received
158
- */
159
- public recomputePriceInfoReceive<C extends ChainIds<T>>(
160
- chainIdentifier: C,
161
- amountSats: bigint,
162
- satsBaseFee: bigint,
163
- feePPM: bigint,
164
- receiveToken: bigint,
165
- tokenAddress: string,
166
- ): PriceInfoType {
167
- const totalSats = (amountSats * (1000000n - feePPM) / 1000000n)
168
- - satsBaseFee;
169
- const totalUSats = totalSats * 1000000n;
170
- const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / receiveToken;
171
-
172
- return {
173
- isValid: true,
174
- differencePPM: 0n,
175
- satsBaseFee,
176
- feePPM,
177
- realPriceUSatPerToken: this.shouldIgnore(chainIdentifier, tokenAddress) ? undefined : swapPriceUSatPerToken,
178
- swapPriceUSatPerToken
179
- };
180
- }
181
-
182
- /**
183
- * Checks whether the swap amounts are valid given the current market rate for a given pair
184
- *
185
- * @param chainIdentifier Chain identifier of the smart chain
186
- * @param amountSats Amount of sats (BTC) to be paid to the swap
187
- * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
188
- * @param feePPM PPM fee rate as reported by the intermediary
189
- * @param receiveToken Amount of token to be received from the swap
190
- * @param tokenAddress Token address to be received
191
- * @param abortSignal
192
- * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
193
- * @param realSwapFeeSats
194
- */
195
- public async isValidAmountReceive<C extends ChainIds<T>>(
196
- chainIdentifier: C,
197
- amountSats: bigint,
198
- satsBaseFee: bigint,
199
- feePPM: bigint,
200
- receiveToken: bigint,
201
- tokenAddress: string,
202
- abortSignal?: AbortSignal,
203
- preFetchedPrice?: bigint | null,
204
- realSwapFeeSats?: bigint
205
- ): Promise<PriceInfoType> {
206
- if(realSwapFeeSats!=undefined) {
207
- if(realSwapFeeSats>=amountSats) throw new Error("Invalid swap fee! Larger than or equal to total output amount!");
208
- if(realSwapFeeSats<0) throw new Error("Invalid swap fee! Must be non-negative!");
209
- }
210
- const totalSats = realSwapFeeSats!=undefined
211
- ? amountSats - realSwapFeeSats
212
- : (amountSats * (1000000n - feePPM) / 1000000n) - satsBaseFee;
213
- const totalUSats = totalSats * 1000000n;
214
-
215
- const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / receiveToken;
216
-
217
- if(this.shouldIgnore(chainIdentifier, tokenAddress)) return {
218
- isValid: true,
219
- differencePPM: 0n,
220
- satsBaseFee,
221
- feePPM,
222
- realPriceUSatPerToken: undefined,
223
- swapPriceUSatPerToken
224
- };
225
-
226
- const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats, tokenAddress, abortSignal, preFetchedPrice);
227
- const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / calculatedAmtInToken;
228
-
229
- const difference = calculatedAmtInToken - receiveToken; //Will be >0 if we receive less than we should've
230
- const differencePPM = difference * 100000n / calculatedAmtInToken;
231
-
232
- return {
233
- isValid: differencePPM <= this.maxAllowedFeeDifferencePPM,
234
- differencePPM,
235
- satsBaseFee,
236
- feePPM,
237
- realPriceUSatPerToken,
238
- swapPriceUSatPerToken
239
- };
240
- }
241
-
242
- /**
243
- * Pre-fetches the pricing data for a given token, such that further calls to {@link isValidAmountReceive} or
244
- * {@link isValidAmountSend} are quicker and don't need to wait for the price fetch
245
- *
246
- * @param chainIdentifier Chain identifier of the smart chain
247
- * @param tokenAddress Token address
248
- * @param abortSignal
249
- */
250
- public preFetchPrice<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string, abortSignal?: AbortSignal): Promise<bigint> {
251
- return this.getPrice(chainIdentifier, tokenAddress, abortSignal);
252
- }
253
-
254
- /**
255
- * Pre-fetches the Bitcoin USD price data, such that further calls to {@link getBtcUsdValue},
256
- * {@link getTokenUsdValue} or {@link getUsdValue} are quicker and don't need to wait for the price fetch
257
- *
258
- * @param abortSignal
259
- */
260
- public preFetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
261
- return this.getUsdPrice(abortSignal);
262
- }
263
-
264
- /**
265
- * Returns amount of `toToken` that is equivalent to `fromAmount` satoshis
266
- *
267
- * @param chainIdentifier Chain identifier string for the smart chain
268
- * @param fromAmount Amount of satoshis
269
- * @param toToken Token address
270
- * @param abortSignal
271
- * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
272
- * @throws {Error} when token is not found
273
- */
274
- public async getFromBtcSwapAmount<C extends ChainIds<T>>(
275
- chainIdentifier: C,
276
- fromAmount: bigint,
277
- toToken: string,
278
- abortSignal?: AbortSignal,
279
- preFetchedPrice?: bigint | null
280
- ): Promise<bigint> {
281
- if(this.getDecimals(chainIdentifier, toToken.toString())==null) throw new Error("Token not found!");
282
-
283
- const price = preFetchedPrice || await this.getPrice(chainIdentifier, toToken, abortSignal);
284
-
285
- return fromAmount
286
- * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, toToken.toString())))
287
- * (1000000n) //To usat
288
- / (price);
289
- }
290
-
291
- /**
292
- * Returns amount of satoshis that are equivalent to `fromAmount` of `fromToken`
293
- *
294
- * @param chainIdentifier Chain identifier string for the smart chain
295
- * @param fromAmount Amount of the token
296
- * @param fromToken Token address
297
- * @param abortSignal
298
- * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
299
- * @throws {Error} when token is not found
300
- */
301
- public async getToBtcSwapAmount<C extends ChainIds<T>>(
302
- chainIdentifier: C,
303
- fromAmount: bigint,
304
- fromToken: string,
305
- abortSignal?: AbortSignal,
306
- preFetchedPrice?: bigint
307
- ): Promise<bigint> {
308
- if(this.getDecimals(chainIdentifier, fromToken.toString())==null) throw new Error("Token not found");
309
-
310
- const price = preFetchedPrice || await this.getPrice(chainIdentifier, fromToken, abortSignal);
311
-
312
- return fromAmount
313
- * price
314
- / 1000000n
315
- / (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, fromToken.toString())));
316
- }
317
-
318
- /**
319
- * Returns whether the token should be ignored and pricing for it not calculated
320
- *
321
- * @param chainIdentifier Chain identifier string for the smart chain
322
- * @param tokenAddress Token address
323
- * @throws {Error} if token is not found
324
- */
325
- public shouldIgnore<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string): boolean {
326
- const coin = this.getDecimals(chainIdentifier, tokenAddress.toString());
327
- if(coin==null) throw new Error("Token not found");
328
- return coin===-1;
329
- }
330
-
331
- /**
332
- * Returns the USD value of the bitcoin amount
333
- *
334
- * @param btcSats Bitcoin amount in satoshis
335
- * @param abortSignal
336
- * @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
337
- */
338
- public async getBtcUsdValue(
339
- btcSats: bigint,
340
- abortSignal?: AbortSignal,
341
- preFetchedUsdPrice?: number
342
- ): Promise<number> {
343
- return Number(btcSats)*(preFetchedUsdPrice || await this.getUsdPrice(abortSignal));
344
- }
345
-
346
- /**
347
- * Returns the USD value of the smart chain token amount
348
- *
349
- * @param chainIdentifier Chain identifier string for the smart chain
350
- * @param tokenAmount Amount of the token in base units
351
- * @param tokenAddress Token address
352
- * @param abortSignal
353
- * @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
354
- */
355
- public async getTokenUsdValue<C extends ChainIds<T>>(
356
- chainIdentifier: C,
357
- tokenAmount: bigint,
358
- tokenAddress: string,
359
- abortSignal?: AbortSignal,
360
- preFetchedUsdPrice?: number
361
- ): Promise<number> {
362
- const [btcAmount, usdPrice] = await Promise.all([
363
- this.getToBtcSwapAmount(chainIdentifier, tokenAmount, tokenAddress, abortSignal),
364
- preFetchedUsdPrice==null ? this.preFetchUsdPrice(abortSignal) : Promise.resolve(preFetchedUsdPrice)
365
- ]);
366
- return Number(btcAmount)*usdPrice;
367
- }
368
-
369
- /**
370
- * Returns the USD value of the token amount
371
- *
372
- * @param amount Amount in base units of the token
373
- * @param token Token to fetch the usd price for
374
- * @param abortSignal
375
- * @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
376
- */
377
- public getUsdValue<C extends ChainIds<T>>(
378
- amount: bigint,
379
- token: Token<C>,
380
- abortSignal?: AbortSignal,
381
- preFetchedUsdPrice?: number
382
- ): Promise<number> {
383
- if(token.chain==="BTC") {
384
- return this.getBtcUsdValue(amount, abortSignal, preFetchedUsdPrice);
385
- } else {
386
- return this.getTokenUsdValue(token.chainId, amount, token.address, abortSignal, preFetchedUsdPrice);
387
- }
388
- }
389
-
390
- }
1
+ import {ChainIds, MultiChain} from "../../swapper/Swapper";
2
+ import {Token} from "../../types/Token";
3
+ import {PriceInfoType} from "../../types/PriceInfoType";
4
+
5
+ /**
6
+ * Abstract base class for swap pricing implementations
7
+ *
8
+ * @category Pricing
9
+ */
10
+ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
11
+
12
+ maxAllowedFeeDifferencePPM: bigint;
13
+
14
+ protected constructor(maxAllowedFeeDifferencePPM: bigint) {
15
+ this.maxAllowedFeeDifferencePPM = maxAllowedFeeDifferencePPM;
16
+ }
17
+
18
+ /**
19
+ * Gets the decimal places for a given token, returns `-1` if token should be ignored & `null` if token is not found
20
+ *
21
+ * @param chainIdentifier Chain identifier of the smart chain
22
+ * @param tokenAddress Token address
23
+ * @protected
24
+ */
25
+ protected abstract getDecimals<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string): number | null;
26
+
27
+ /**
28
+ * Returns the price of the token in BTC uSats (microSats)
29
+ *
30
+ * @param chainIdentifier Chain identifier of the smart chain
31
+ * @param tokenAddress Token address
32
+ * @param abortSignal
33
+ * @protected
34
+ */
35
+ protected abstract getPrice<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string, abortSignal?: AbortSignal): Promise<bigint>;
36
+
37
+ /**
38
+ * Returns the price of bitcoin in USD (sats/USD)
39
+ *
40
+ * @param abortSignal
41
+ * @protected
42
+ */
43
+ protected abstract getUsdPrice(abortSignal?: AbortSignal): Promise<number>;
44
+
45
+ /**
46
+ * Gets the decimal places for a given token, returns `-1` if token should be ignored & throws if token is not found
47
+ *
48
+ * @param chainIdentifier Chain identifier of the smart chain
49
+ * @param tokenAddress Token address
50
+ * @throws {Error} When token is not known
51
+ * @protected
52
+ */
53
+ protected getDecimalsThrowing<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string): number {
54
+ const decimals = this.getDecimals(chainIdentifier, tokenAddress);
55
+ if(decimals==null) throw new Error(`Cannot get decimal count for token ${chainIdentifier}:${tokenAddress}!`);
56
+ return decimals;
57
+ }
58
+
59
+ /**
60
+ * Recomputes pricing info without fetching the current price
61
+ *
62
+ * @param chainIdentifier Chain identifier of the smart chain
63
+ * @param amountSats Amount of sats (BTC) to be received from the swap
64
+ * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
65
+ * @param feePPM PPM fee rate as reported by the intermediary
66
+ * @param paidToken Amount of token to be paid to the swap
67
+ * @param tokenAddress Token address to be paid
68
+ */
69
+ public recomputePriceInfoSend<C extends ChainIds<T>>(
70
+ chainIdentifier: C,
71
+ amountSats: bigint,
72
+ satsBaseFee: bigint,
73
+ feePPM: bigint,
74
+ paidToken: bigint,
75
+ tokenAddress: string
76
+ ): PriceInfoType {
77
+ const totalSats = (amountSats * (1000000n + feePPM) / 1000000n)
78
+ + satsBaseFee;
79
+ const totalUSats = totalSats * 1000000n;
80
+ const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / paidToken;
81
+
82
+ return {
83
+ isValid: true,
84
+ differencePPM: 0n,
85
+ satsBaseFee,
86
+ feePPM,
87
+ realPriceUSatPerToken: this.shouldIgnore(chainIdentifier, tokenAddress) ? undefined : swapPriceUSatPerToken,
88
+ swapPriceUSatPerToken
89
+ };
90
+ }
91
+
92
+ /**
93
+ * Checks whether the swap amounts are valid given the current market rate for a given pair
94
+ *
95
+ * @param chainIdentifier Chain identifier of the smart chain
96
+ * @param amountSats Amount of sats (BTC) to be received from the swap
97
+ * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
98
+ * @param feePPM PPM fee rate as reported by the intermediary
99
+ * @param paidToken Amount of token to be paid to the swap
100
+ * @param tokenAddress Token address to be paid
101
+ * @param abortSignal
102
+ * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
103
+ * @param realSwapFeeSats
104
+ */
105
+ public async isValidAmountSend<C extends ChainIds<T>>(
106
+ chainIdentifier: C,
107
+ amountSats: bigint,
108
+ satsBaseFee: bigint,
109
+ feePPM: bigint,
110
+ paidToken: bigint,
111
+ tokenAddress: string,
112
+ abortSignal?: AbortSignal,
113
+ preFetchedPrice?: bigint | null,
114
+ realSwapFeeSats?: bigint
115
+ ): Promise<PriceInfoType> {
116
+ if(realSwapFeeSats!=undefined && realSwapFeeSats<0) throw new Error("Invalid swap fee! Swap fee cannot be negative!");
117
+ const totalSats = realSwapFeeSats!=undefined
118
+ ? amountSats + realSwapFeeSats
119
+ : (amountSats * (1000000n + feePPM) / 1000000n) + satsBaseFee;
120
+ const totalUSats = totalSats * 1000000n;
121
+
122
+ const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / paidToken;
123
+
124
+ if(this.shouldIgnore(chainIdentifier, tokenAddress)) return {
125
+ isValid: true,
126
+ differencePPM: 0n,
127
+ satsBaseFee,
128
+ feePPM,
129
+ realPriceUSatPerToken: undefined,
130
+ swapPriceUSatPerToken
131
+ };
132
+
133
+ const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats, tokenAddress, abortSignal, preFetchedPrice);
134
+ const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / calculatedAmtInToken;
135
+
136
+ const difference = paidToken - calculatedAmtInToken; //Will be >0 if we need to pay more than we should've
137
+ const differencePPM = difference * 1000000n / calculatedAmtInToken;
138
+
139
+ return {
140
+ isValid: differencePPM <= this.maxAllowedFeeDifferencePPM,
141
+ differencePPM,
142
+ satsBaseFee,
143
+ feePPM,
144
+ realPriceUSatPerToken,
145
+ swapPriceUSatPerToken
146
+ };
147
+ }
148
+
149
+ /**
150
+ * Recomputes pricing info without fetching the current price
151
+ *
152
+ * @param chainIdentifier Chain identifier of the smart chain
153
+ * @param amountSats Amount of sats (BTC) to be paid to the swap
154
+ * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
155
+ * @param feePPM PPM fee rate as reported by the intermediary
156
+ * @param receiveToken Amount of token to be received from the swap
157
+ * @param tokenAddress Token address to be received
158
+ */
159
+ public recomputePriceInfoReceive<C extends ChainIds<T>>(
160
+ chainIdentifier: C,
161
+ amountSats: bigint,
162
+ satsBaseFee: bigint,
163
+ feePPM: bigint,
164
+ receiveToken: bigint,
165
+ tokenAddress: string,
166
+ ): PriceInfoType {
167
+ const totalSats = (amountSats * (1000000n - feePPM) / 1000000n)
168
+ - satsBaseFee;
169
+ const totalUSats = totalSats * 1000000n;
170
+ const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / receiveToken;
171
+
172
+ return {
173
+ isValid: true,
174
+ differencePPM: 0n,
175
+ satsBaseFee,
176
+ feePPM,
177
+ realPriceUSatPerToken: this.shouldIgnore(chainIdentifier, tokenAddress) ? undefined : swapPriceUSatPerToken,
178
+ swapPriceUSatPerToken
179
+ };
180
+ }
181
+
182
+ /**
183
+ * Checks whether the swap amounts are valid given the current market rate for a given pair
184
+ *
185
+ * @param chainIdentifier Chain identifier of the smart chain
186
+ * @param amountSats Amount of sats (BTC) to be paid to the swap
187
+ * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
188
+ * @param feePPM PPM fee rate as reported by the intermediary
189
+ * @param receiveToken Amount of token to be received from the swap
190
+ * @param tokenAddress Token address to be received
191
+ * @param abortSignal
192
+ * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
193
+ * @param realSwapFeeSats
194
+ */
195
+ public async isValidAmountReceive<C extends ChainIds<T>>(
196
+ chainIdentifier: C,
197
+ amountSats: bigint,
198
+ satsBaseFee: bigint,
199
+ feePPM: bigint,
200
+ receiveToken: bigint,
201
+ tokenAddress: string,
202
+ abortSignal?: AbortSignal,
203
+ preFetchedPrice?: bigint | null,
204
+ realSwapFeeSats?: bigint
205
+ ): Promise<PriceInfoType> {
206
+ if(realSwapFeeSats!=undefined) {
207
+ if(realSwapFeeSats>=amountSats) throw new Error("Invalid swap fee! Larger than or equal to total output amount!");
208
+ if(realSwapFeeSats<0) throw new Error("Invalid swap fee! Must be non-negative!");
209
+ }
210
+ const totalSats = realSwapFeeSats!=undefined
211
+ ? amountSats - realSwapFeeSats
212
+ : (amountSats * (1000000n - feePPM) / 1000000n) - satsBaseFee;
213
+ const totalUSats = totalSats * 1000000n;
214
+
215
+ const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / receiveToken;
216
+
217
+ if(this.shouldIgnore(chainIdentifier, tokenAddress)) return {
218
+ isValid: true,
219
+ differencePPM: 0n,
220
+ satsBaseFee,
221
+ feePPM,
222
+ realPriceUSatPerToken: undefined,
223
+ swapPriceUSatPerToken
224
+ };
225
+
226
+ const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats, tokenAddress, abortSignal, preFetchedPrice);
227
+ const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / calculatedAmtInToken;
228
+
229
+ const difference = calculatedAmtInToken - receiveToken; //Will be >0 if we receive less than we should've
230
+ const differencePPM = difference * 100000n / calculatedAmtInToken;
231
+
232
+ return {
233
+ isValid: differencePPM <= this.maxAllowedFeeDifferencePPM,
234
+ differencePPM,
235
+ satsBaseFee,
236
+ feePPM,
237
+ realPriceUSatPerToken,
238
+ swapPriceUSatPerToken
239
+ };
240
+ }
241
+
242
+ /**
243
+ * Pre-fetches the pricing data for a given token, such that further calls to {@link isValidAmountReceive} or
244
+ * {@link isValidAmountSend} are quicker and don't need to wait for the price fetch
245
+ *
246
+ * @param chainIdentifier Chain identifier of the smart chain
247
+ * @param tokenAddress Token address
248
+ * @param abortSignal
249
+ */
250
+ public preFetchPrice<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string, abortSignal?: AbortSignal): Promise<bigint> {
251
+ return this.getPrice(chainIdentifier, tokenAddress, abortSignal);
252
+ }
253
+
254
+ /**
255
+ * Pre-fetches the Bitcoin USD price data, such that further calls to {@link getBtcUsdValue},
256
+ * {@link getTokenUsdValue} or {@link getUsdValue} are quicker and don't need to wait for the price fetch
257
+ *
258
+ * @param abortSignal
259
+ */
260
+ public preFetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
261
+ return this.getUsdPrice(abortSignal);
262
+ }
263
+
264
+ /**
265
+ * Returns amount of `toToken` that is equivalent to `fromAmount` satoshis
266
+ *
267
+ * @param chainIdentifier Chain identifier string for the smart chain
268
+ * @param fromAmount Amount of satoshis
269
+ * @param toToken Token address
270
+ * @param abortSignal
271
+ * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
272
+ * @throws {Error} when token is not found
273
+ */
274
+ public async getFromBtcSwapAmount<C extends ChainIds<T>>(
275
+ chainIdentifier: C,
276
+ fromAmount: bigint,
277
+ toToken: string,
278
+ abortSignal?: AbortSignal,
279
+ preFetchedPrice?: bigint | null
280
+ ): Promise<bigint> {
281
+ if(this.getDecimals(chainIdentifier, toToken.toString())==null) throw new Error("Token not found!");
282
+
283
+ const price = preFetchedPrice || await this.getPrice(chainIdentifier, toToken, abortSignal);
284
+
285
+ return fromAmount
286
+ * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, toToken.toString())))
287
+ * (1000000n) //To usat
288
+ / (price);
289
+ }
290
+
291
+ /**
292
+ * Returns amount of satoshis that are equivalent to `fromAmount` of `fromToken`
293
+ *
294
+ * @param chainIdentifier Chain identifier string for the smart chain
295
+ * @param fromAmount Amount of the token
296
+ * @param fromToken Token address
297
+ * @param abortSignal
298
+ * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
299
+ * @throws {Error} when token is not found
300
+ */
301
+ public async getToBtcSwapAmount<C extends ChainIds<T>>(
302
+ chainIdentifier: C,
303
+ fromAmount: bigint,
304
+ fromToken: string,
305
+ abortSignal?: AbortSignal,
306
+ preFetchedPrice?: bigint
307
+ ): Promise<bigint> {
308
+ if(this.getDecimals(chainIdentifier, fromToken.toString())==null) throw new Error("Token not found");
309
+
310
+ const price = preFetchedPrice || await this.getPrice(chainIdentifier, fromToken, abortSignal);
311
+
312
+ return fromAmount
313
+ * price
314
+ / 1000000n
315
+ / (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, fromToken.toString())));
316
+ }
317
+
318
+ /**
319
+ * Returns whether the token should be ignored and pricing for it not calculated
320
+ *
321
+ * @param chainIdentifier Chain identifier string for the smart chain
322
+ * @param tokenAddress Token address
323
+ * @throws {Error} if token is not found
324
+ */
325
+ public shouldIgnore<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string): boolean {
326
+ const coin = this.getDecimals(chainIdentifier, tokenAddress.toString());
327
+ if(coin==null) throw new Error("Token not found");
328
+ return coin===-1;
329
+ }
330
+
331
+ /**
332
+ * Returns the USD value of the bitcoin amount
333
+ *
334
+ * @param btcSats Bitcoin amount in satoshis
335
+ * @param abortSignal
336
+ * @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
337
+ */
338
+ public async getBtcUsdValue(
339
+ btcSats: bigint,
340
+ abortSignal?: AbortSignal,
341
+ preFetchedUsdPrice?: number
342
+ ): Promise<number> {
343
+ return Number(btcSats)*(preFetchedUsdPrice || await this.getUsdPrice(abortSignal));
344
+ }
345
+
346
+ /**
347
+ * Returns the USD value of the smart chain token amount
348
+ *
349
+ * @param chainIdentifier Chain identifier string for the smart chain
350
+ * @param tokenAmount Amount of the token in base units
351
+ * @param tokenAddress Token address
352
+ * @param abortSignal
353
+ * @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
354
+ */
355
+ public async getTokenUsdValue<C extends ChainIds<T>>(
356
+ chainIdentifier: C,
357
+ tokenAmount: bigint,
358
+ tokenAddress: string,
359
+ abortSignal?: AbortSignal,
360
+ preFetchedUsdPrice?: number
361
+ ): Promise<number> {
362
+ const [btcAmount, usdPrice] = await Promise.all([
363
+ this.getToBtcSwapAmount(chainIdentifier, tokenAmount, tokenAddress, abortSignal),
364
+ preFetchedUsdPrice==null ? this.preFetchUsdPrice(abortSignal) : Promise.resolve(preFetchedUsdPrice)
365
+ ]);
366
+ return Number(btcAmount)*usdPrice;
367
+ }
368
+
369
+ /**
370
+ * Returns the USD value of the token amount
371
+ *
372
+ * @param amount Amount in base units of the token
373
+ * @param token Token to fetch the usd price for
374
+ * @param abortSignal
375
+ * @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
376
+ */
377
+ public getUsdValue<C extends ChainIds<T>>(
378
+ amount: bigint,
379
+ token: Token<C>,
380
+ abortSignal?: AbortSignal,
381
+ preFetchedUsdPrice?: number
382
+ ): Promise<number> {
383
+ if(token.chain==="BTC") {
384
+ return this.getBtcUsdValue(amount, abortSignal, preFetchedUsdPrice);
385
+ } else {
386
+ return this.getTokenUsdValue(token.chainId, amount, token.address, abortSignal, preFetchedUsdPrice);
387
+ }
388
+ }
389
+
390
+ }