@atomiqlabs/sdk 7.0.12 → 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.
- package/README.md +45 -29
- package/dist/SmartChainAssets.d.ts +11 -3
- package/dist/SmartChainAssets.js +7 -3
- package/dist/bitcoin/BitcoinRpcWithAddressIndex.d.ts +68 -0
- package/dist/bitcoin/BitcoinRpcWithAddressIndex.js +2 -0
- package/dist/bitcoin/LightningNetworkApi.d.ts +12 -0
- package/dist/bitcoin/LightningNetworkApi.js +2 -0
- package/dist/bitcoin/coinselect2/accumulative.d.ts +6 -0
- package/dist/bitcoin/coinselect2/accumulative.js +52 -0
- package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -0
- package/dist/bitcoin/coinselect2/blackjack.js +38 -0
- package/dist/bitcoin/coinselect2/index.d.ts +19 -0
- package/dist/bitcoin/coinselect2/index.js +69 -0
- package/dist/bitcoin/coinselect2/utils.d.ts +71 -0
- package/dist/bitcoin/coinselect2/utils.js +123 -0
- package/dist/bitcoin/mempool/MempoolApi.d.ts +350 -0
- package/dist/bitcoin/mempool/MempoolApi.js +311 -0
- package/dist/bitcoin/mempool/MempoolBitcoinBlock.d.ts +44 -0
- package/dist/bitcoin/mempool/MempoolBitcoinBlock.js +48 -0
- package/dist/bitcoin/mempool/MempoolBitcoinRpc.d.ts +119 -0
- package/dist/bitcoin/mempool/MempoolBitcoinRpc.js +361 -0
- package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.d.ts +22 -0
- package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.js +105 -0
- package/dist/bitcoin/wallet/BitcoinWallet.d.ts +93 -0
- package/dist/bitcoin/wallet/BitcoinWallet.js +273 -0
- package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +28 -0
- package/dist/bitcoin/wallet/IBitcoinWallet.js +20 -0
- package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.d.ts +21 -0
- package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.js +2 -0
- package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.d.ts +7 -0
- package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.js +2 -0
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +40 -0
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +86 -0
- package/dist/enums/FeeType.d.ts +8 -0
- package/dist/enums/FeeType.js +12 -0
- package/dist/enums/SwapAmountType.d.ts +8 -0
- package/dist/enums/SwapAmountType.js +12 -0
- package/dist/enums/SwapDirection.d.ts +8 -0
- package/dist/enums/SwapDirection.js +12 -0
- package/dist/enums/SwapType.d.ts +14 -0
- package/dist/enums/SwapType.js +18 -0
- package/dist/errors/IntermediaryError.d.ts +9 -0
- package/dist/errors/IntermediaryError.js +26 -0
- package/dist/errors/PaymentAuthError.d.ts +11 -0
- package/dist/errors/PaymentAuthError.js +23 -0
- package/dist/errors/RequestError.d.ts +18 -0
- package/dist/errors/RequestError.js +46 -0
- package/dist/errors/UserError.d.ts +7 -0
- package/dist/errors/UserError.js +15 -0
- package/dist/events/UnifiedSwapEventListener.d.ts +23 -0
- package/dist/events/UnifiedSwapEventListener.js +130 -0
- package/dist/http/HttpUtils.d.ts +27 -0
- package/dist/http/HttpUtils.js +91 -0
- package/dist/http/paramcoders/IParamReader.d.ts +8 -0
- package/dist/http/paramcoders/IParamReader.js +2 -0
- package/dist/http/paramcoders/ParamDecoder.d.ts +44 -0
- package/dist/http/paramcoders/ParamDecoder.js +132 -0
- package/dist/http/paramcoders/ParamEncoder.d.ts +20 -0
- package/dist/http/paramcoders/ParamEncoder.js +31 -0
- package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -0
- package/dist/http/paramcoders/SchemaVerifier.js +145 -0
- package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -0
- package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -0
- package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -0
- package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -0
- package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -0
- package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -0
- package/dist/index.d.ts +82 -4
- package/dist/index.js +128 -4
- package/dist/intermediaries/Intermediary.d.ts +111 -0
- package/dist/intermediaries/Intermediary.js +115 -0
- package/dist/intermediaries/IntermediaryDiscovery.d.ts +166 -0
- package/dist/intermediaries/IntermediaryDiscovery.js +390 -0
- package/dist/intermediaries/apis/IntermediaryAPI.d.ts +436 -0
- package/dist/intermediaries/apis/IntermediaryAPI.js +600 -0
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +154 -0
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +136 -0
- package/dist/lnurl/LNURL.d.ts +102 -0
- package/dist/lnurl/LNURL.js +321 -0
- package/dist/prices/RedundantSwapPrice.d.ts +89 -0
- package/dist/prices/RedundantSwapPrice.js +202 -0
- package/dist/prices/SingleSwapPrice.d.ts +31 -0
- package/dist/prices/SingleSwapPrice.js +41 -0
- package/dist/prices/SwapPriceWithChain.d.ts +70 -0
- package/dist/prices/SwapPriceWithChain.js +91 -0
- package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -0
- package/dist/prices/abstract/ICachedSwapPrice.js +62 -0
- package/dist/prices/abstract/IPriceProvider.d.ts +81 -0
- package/dist/prices/abstract/IPriceProvider.js +74 -0
- package/dist/prices/abstract/ISwapPrice.d.ts +117 -0
- package/dist/prices/abstract/ISwapPrice.js +219 -0
- package/dist/prices/providers/BinancePriceProvider.d.ts +16 -0
- package/dist/prices/providers/BinancePriceProvider.js +23 -0
- package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +17 -0
- package/dist/prices/providers/CoinGeckoPriceProvider.js +23 -0
- package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +19 -0
- package/dist/prices/providers/CoinPaprikaPriceProvider.js +23 -0
- package/dist/prices/providers/CustomPriceProvider.d.ts +13 -0
- package/dist/prices/providers/CustomPriceProvider.js +24 -0
- package/dist/prices/providers/KrakenPriceProvider.d.ts +29 -0
- package/dist/prices/providers/KrakenPriceProvider.js +36 -0
- package/dist/prices/providers/OKXPriceProvider.d.ts +28 -0
- package/dist/prices/providers/OKXPriceProvider.js +23 -0
- package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +14 -0
- package/dist/prices/providers/abstract/ExchangePriceProvider.js +18 -0
- package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -0
- package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -0
- package/dist/storage/IUnifiedStorage.d.ts +73 -0
- package/dist/storage/IUnifiedStorage.js +2 -0
- package/dist/storage/UnifiedSwapStorage.d.ts +82 -0
- package/dist/storage/UnifiedSwapStorage.js +83 -0
- package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +39 -0
- package/dist/storage-browser/IndexedDBUnifiedStorage.js +275 -0
- package/dist/{storage → storage-browser}/LocalStorageManager.d.ts +1 -0
- package/dist/{storage → storage-browser}/LocalStorageManager.js +2 -1
- package/dist/swapper/Swapper.d.ts +533 -0
- package/dist/swapper/Swapper.js +1566 -0
- package/dist/swapper/SwapperFactory.d.ts +87 -0
- package/dist/{SwapperFactory.js → swapper/SwapperFactory.js} +37 -19
- package/dist/swapper/SwapperUtils.d.ts +153 -0
- package/dist/swapper/SwapperUtils.js +420 -0
- package/dist/swapper/SwapperWithChain.d.ts +214 -0
- package/dist/swapper/SwapperWithChain.js +315 -0
- package/dist/swapper/SwapperWithSigner.d.ts +178 -0
- package/dist/swapper/SwapperWithSigner.js +172 -0
- package/dist/swaps/IAddressSwap.d.ts +13 -0
- package/dist/swaps/IAddressSwap.js +13 -0
- package/dist/swaps/IBTCWalletSwap.d.ts +55 -0
- package/dist/swaps/IBTCWalletSwap.js +17 -0
- package/dist/swaps/IClaimableSwap.d.ts +17 -0
- package/dist/swaps/IClaimableSwap.js +14 -0
- package/dist/swaps/IClaimableSwapWrapper.d.ts +5 -0
- package/dist/swaps/IClaimableSwapWrapper.js +2 -0
- package/dist/swaps/IRefundableSwap.d.ts +17 -0
- package/dist/swaps/IRefundableSwap.js +13 -0
- package/dist/swaps/ISwap.d.ts +207 -0
- package/dist/swaps/ISwap.js +264 -0
- package/dist/swaps/ISwapWithGasDrop.d.ts +15 -0
- package/dist/swaps/ISwapWithGasDrop.js +11 -0
- package/dist/swaps/ISwapWrapper.d.ts +153 -0
- package/dist/swaps/ISwapWrapper.js +227 -0
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +53 -0
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +116 -0
- package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +70 -0
- package/dist/swaps/escrow_swaps/IEscrowSwap.js +132 -0
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +85 -0
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +122 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +86 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +115 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +93 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +121 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +45 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +65 -0
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +263 -0
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +933 -0
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +110 -0
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +307 -0
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +236 -0
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +898 -0
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +125 -0
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +393 -0
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +245 -0
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +841 -0
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +120 -0
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +294 -0
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +228 -0
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +721 -0
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +37 -0
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +93 -0
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +86 -0
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +213 -0
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +170 -0
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +520 -0
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +50 -0
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +109 -0
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +93 -0
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +217 -0
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +315 -0
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1098 -0
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +125 -0
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +631 -0
- package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +107 -0
- package/dist/swaps/trusted/ln/LnForGasSwap.js +343 -0
- package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +21 -0
- package/dist/swaps/trusted/ln/LnForGasWrapper.js +62 -0
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +164 -0
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +520 -0
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +48 -0
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +74 -0
- package/dist/types/AmountData.d.ts +9 -0
- package/dist/types/AmountData.js +2 -0
- package/dist/types/CustomPriceFunction.d.ts +5 -0
- package/dist/types/CustomPriceFunction.js +2 -0
- package/dist/types/PriceInfoType.d.ts +28 -0
- package/dist/types/PriceInfoType.js +57 -0
- package/dist/types/SwapExecutionAction.d.ts +7 -0
- package/dist/types/SwapExecutionAction.js +2 -0
- package/dist/types/SwapWithSigner.d.ts +14 -0
- package/dist/types/SwapWithSigner.js +40 -0
- package/dist/types/Token.d.ts +53 -0
- package/dist/types/Token.js +58 -0
- package/dist/types/TokenAmount.d.ts +57 -0
- package/dist/types/TokenAmount.js +47 -0
- package/dist/types/fees/Fee.d.ts +49 -0
- package/dist/types/fees/Fee.js +2 -0
- package/dist/types/fees/FeeBreakdown.d.ts +10 -0
- package/dist/types/fees/FeeBreakdown.js +2 -0
- package/dist/types/fees/PercentagePPM.d.ts +15 -0
- package/dist/types/fees/PercentagePPM.js +17 -0
- package/dist/types/lnurl/LNURLPay.d.ts +54 -0
- package/dist/types/lnurl/LNURLPay.js +28 -0
- package/dist/types/lnurl/LNURLWithdraw.d.ts +42 -0
- package/dist/types/lnurl/LNURLWithdraw.js +24 -0
- package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -0
- package/dist/utils/AutomaticClockDriftCorrection.js +70 -0
- package/dist/utils/BitcoinUtils.d.ts +13 -0
- package/dist/utils/BitcoinUtils.js +98 -0
- package/dist/utils/BitcoinWalletUtils.d.ts +7 -0
- package/dist/utils/BitcoinWalletUtils.js +14 -0
- package/dist/utils/Logger.d.ts +7 -0
- package/dist/utils/Logger.js +12 -0
- package/dist/utils/RetryUtils.d.ts +21 -0
- package/dist/utils/RetryUtils.js +66 -0
- package/dist/utils/SwapUtils.d.ts +31 -0
- package/dist/utils/SwapUtils.js +18 -0
- package/dist/{Utils.d.ts → utils/TimeoutUtils.d.ts} +9 -3
- package/dist/utils/TimeoutUtils.js +55 -0
- package/dist/utils/TokenUtils.d.ts +11 -0
- package/dist/utils/TokenUtils.js +29 -0
- package/dist/utils/TypeUtils.d.ts +7 -0
- package/dist/utils/TypeUtils.js +2 -0
- package/dist/utils/Utils.d.ts +57 -0
- package/dist/utils/Utils.js +178 -0
- package/package.json +14 -6
- package/src/SmartChainAssets.ts +11 -3
- package/src/bitcoin/BitcoinRpcWithAddressIndex.ts +87 -0
- package/src/bitcoin/LightningNetworkApi.ts +16 -0
- package/src/bitcoin/coinselect2/accumulative.ts +68 -0
- package/src/bitcoin/coinselect2/blackjack.ts +49 -0
- package/src/bitcoin/coinselect2/index.ts +92 -0
- package/src/bitcoin/coinselect2/utils.ts +189 -0
- package/src/bitcoin/mempool/MempoolApi.ts +554 -0
- package/src/bitcoin/mempool/MempoolBitcoinBlock.ts +88 -0
- package/src/bitcoin/mempool/MempoolBitcoinRpc.ts +437 -0
- package/src/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.ts +134 -0
- package/src/bitcoin/wallet/BitcoinWallet.ts +375 -0
- package/src/bitcoin/wallet/IBitcoinWallet.ts +44 -0
- package/src/bitcoin/wallet/MinimalBitcoinWalletInterface.ts +19 -0
- package/src/bitcoin/wallet/MinimalLightningNetworkWalletInterface.ts +7 -0
- package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +108 -0
- package/src/enums/FeeType.ts +9 -0
- package/src/enums/SwapAmountType.ts +9 -0
- package/src/enums/SwapDirection.ts +9 -0
- package/src/enums/SwapType.ts +15 -0
- package/src/errors/IntermediaryError.ts +24 -0
- package/src/errors/PaymentAuthError.ts +26 -0
- package/src/errors/RequestError.ts +51 -0
- package/src/errors/UserError.ts +14 -0
- package/src/events/UnifiedSwapEventListener.ts +171 -0
- package/src/http/HttpUtils.ts +92 -0
- package/src/http/paramcoders/IParamReader.ts +10 -0
- package/src/http/paramcoders/ParamDecoder.ts +142 -0
- package/src/http/paramcoders/ParamEncoder.ts +37 -0
- package/src/http/paramcoders/SchemaVerifier.ts +153 -0
- package/src/http/paramcoders/client/ResponseParamDecoder.ts +58 -0
- package/src/http/paramcoders/client/StreamParamEncoder.ts +29 -0
- package/src/http/paramcoders/client/StreamingFetchPromise.ts +193 -0
- package/src/index.ts +102 -4
- package/src/intermediaries/Intermediary.ts +204 -0
- package/src/intermediaries/IntermediaryDiscovery.ts +485 -0
- package/src/intermediaries/apis/IntermediaryAPI.ts +940 -0
- package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -0
- package/src/lnurl/LNURL.ts +403 -0
- package/src/prices/RedundantSwapPrice.ts +245 -0
- package/src/prices/SingleSwapPrice.ts +47 -0
- package/src/prices/SwapPriceWithChain.ts +157 -0
- package/src/prices/abstract/ICachedSwapPrice.ts +86 -0
- package/src/prices/abstract/IPriceProvider.ts +128 -0
- package/src/prices/abstract/ISwapPrice.ts +328 -0
- package/src/prices/providers/BinancePriceProvider.ts +41 -0
- package/src/prices/providers/CoinGeckoPriceProvider.ts +40 -0
- package/src/prices/providers/CoinPaprikaPriceProvider.ts +44 -0
- package/src/prices/providers/CustomPriceProvider.ts +29 -0
- package/src/prices/providers/KrakenPriceProvider.ts +74 -0
- package/src/prices/providers/OKXPriceProvider.ts +53 -0
- package/src/prices/providers/abstract/ExchangePriceProvider.ts +29 -0
- package/src/prices/providers/abstract/HttpPriceProvider.ts +15 -0
- package/src/storage/IUnifiedStorage.ts +83 -0
- package/src/storage/UnifiedSwapStorage.ts +104 -0
- package/src/storage-browser/IndexedDBUnifiedStorage.ts +328 -0
- package/src/{storage → storage-browser}/LocalStorageManager.ts +2 -1
- package/src/swapper/Swapper.ts +2107 -0
- package/src/{SwapperFactory.ts → swapper/SwapperFactory.ts} +113 -72
- package/src/swapper/SwapperUtils.ts +510 -0
- package/src/swapper/SwapperWithChain.ts +464 -0
- package/src/swapper/SwapperWithSigner.ts +300 -0
- package/src/swaps/IAddressSwap.ts +20 -0
- package/src/swaps/IBTCWalletSwap.ts +77 -0
- package/src/swaps/IClaimableSwap.ts +30 -0
- package/src/swaps/IClaimableSwapWrapper.ts +9 -0
- package/src/swaps/IRefundableSwap.ts +29 -0
- package/src/swaps/ISwap.ts +490 -0
- package/src/swaps/ISwapWithGasDrop.ts +19 -0
- package/src/swaps/ISwapWrapper.ts +344 -0
- package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +168 -0
- package/src/swaps/escrow_swaps/IEscrowSwap.ts +197 -0
- package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +210 -0
- package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +150 -0
- package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +219 -0
- package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +84 -0
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1082 -0
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +429 -0
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1078 -0
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +549 -0
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +974 -0
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +443 -0
- package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +860 -0
- package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +104 -0
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +256 -0
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +716 -0
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +151 -0
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +299 -0
- package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1394 -0
- package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +796 -0
- package/src/swaps/trusted/ln/LnForGasSwap.ts +402 -0
- package/src/swaps/trusted/ln/LnForGasWrapper.ts +70 -0
- package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +633 -0
- package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +110 -0
- package/src/types/AmountData.ts +9 -0
- package/src/types/CustomPriceFunction.ts +5 -0
- package/src/types/PriceInfoType.ts +67 -0
- package/src/types/SwapExecutionAction.ts +8 -0
- package/src/types/SwapWithSigner.ts +57 -0
- package/src/types/Token.ts +90 -0
- package/src/types/TokenAmount.ts +110 -0
- package/src/types/fees/Fee.ts +55 -0
- package/src/types/fees/FeeBreakdown.ts +11 -0
- package/src/types/fees/PercentagePPM.ts +24 -0
- package/src/types/lnurl/LNURLPay.ts +72 -0
- package/src/types/lnurl/LNURLWithdraw.ts +55 -0
- package/src/utils/AutomaticClockDriftCorrection.ts +71 -0
- package/src/utils/BitcoinUtils.ts +86 -0
- package/src/utils/BitcoinWalletUtils.ts +16 -0
- package/src/utils/Logger.ts +15 -0
- package/src/utils/RetryUtils.ts +71 -0
- package/src/utils/SwapUtils.ts +38 -0
- package/src/utils/TimeoutUtils.ts +50 -0
- package/src/utils/TokenUtils.ts +25 -0
- package/src/utils/TypeUtils.ts +9 -0
- package/src/utils/Utils.ts +182 -0
- package/dist/SwapperFactory.d.ts +0 -52
- package/dist/Utils.js +0 -37
- package/dist/fs-storage/FileSystemStorageManager.d.ts +0 -15
- package/dist/fs-storage/FileSystemStorageManager.js +0 -60
- package/dist/fs-storage/index.d.ts +0 -1
- package/dist/fs-storage/index.js +0 -17
- package/src/SmartChainAssets.js +0 -75
- package/src/SwapperFactory.js +0 -120
- package/src/Utils.js +0 -37
- package/src/Utils.ts +0 -31
- package/src/fs-storage/FileSystemStorageManager.ts +0 -71
- package/src/fs-storage/index.ts +0 -1
- package/src/index.js +0 -21
- package/src/storage/LocalStorageManager.js +0 -72
|
@@ -0,0 +1,328 @@
|
|
|
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
|
+
* @category Pricing and LPs
|
|
8
|
+
*/
|
|
9
|
+
export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
10
|
+
|
|
11
|
+
maxAllowedFeeDifferencePPM: bigint;
|
|
12
|
+
|
|
13
|
+
protected constructor(maxAllowedFeeDifferencePPM: bigint) {
|
|
14
|
+
this.maxAllowedFeeDifferencePPM = maxAllowedFeeDifferencePPM;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Gets the decimal places for a given token, returns -1 if token should be ignored & null if token is not found
|
|
19
|
+
* @param chainIdentifier
|
|
20
|
+
* @param token
|
|
21
|
+
* @protected
|
|
22
|
+
*/
|
|
23
|
+
protected abstract getDecimals<C extends ChainIds<T>>(chainIdentifier: C, token: string): number | null;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Returns the price of the token in BTC uSats (microSats)
|
|
27
|
+
*
|
|
28
|
+
* @param chainIdentifier
|
|
29
|
+
* @param token
|
|
30
|
+
* @param abortSignal
|
|
31
|
+
* @protected
|
|
32
|
+
*/
|
|
33
|
+
protected abstract getPrice<C extends ChainIds<T>>(chainIdentifier: C, token: string, abortSignal?: AbortSignal): Promise<bigint>;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Returns the price of bitcoin in USD, (sats/USD)
|
|
37
|
+
*
|
|
38
|
+
* @param abortSignal
|
|
39
|
+
* @protected
|
|
40
|
+
*/
|
|
41
|
+
protected abstract getUsdPrice(abortSignal?: AbortSignal): Promise<number>;
|
|
42
|
+
|
|
43
|
+
protected getDecimalsThrowing<C extends ChainIds<T>>(chainIdentifier: C, token: string): number {
|
|
44
|
+
const decimals = this.getDecimals(chainIdentifier, token);
|
|
45
|
+
if(decimals==null) throw new Error(`Cannot get decimal count for token ${chainIdentifier}:${token}!`);
|
|
46
|
+
return decimals;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Recomputes pricing info without fetching the current price
|
|
51
|
+
*
|
|
52
|
+
* @param chainIdentifier
|
|
53
|
+
* @param amountSats
|
|
54
|
+
* @param satsBaseFee
|
|
55
|
+
* @param feePPM
|
|
56
|
+
* @param paidToken
|
|
57
|
+
* @param token
|
|
58
|
+
*/
|
|
59
|
+
public recomputePriceInfoSend<C extends ChainIds<T>>(
|
|
60
|
+
chainIdentifier: C,
|
|
61
|
+
amountSats: bigint,
|
|
62
|
+
satsBaseFee: bigint,
|
|
63
|
+
feePPM: bigint,
|
|
64
|
+
paidToken: bigint,
|
|
65
|
+
token: string
|
|
66
|
+
): PriceInfoType {
|
|
67
|
+
const totalSats = (amountSats * (1000000n + feePPM) / 1000000n)
|
|
68
|
+
+ satsBaseFee;
|
|
69
|
+
const totalUSats = totalSats * 1000000n;
|
|
70
|
+
const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / paidToken;
|
|
71
|
+
|
|
72
|
+
return {
|
|
73
|
+
isValid: true,
|
|
74
|
+
differencePPM: 0n,
|
|
75
|
+
satsBaseFee,
|
|
76
|
+
feePPM,
|
|
77
|
+
realPriceUSatPerToken: this.shouldIgnore(chainIdentifier, token) ? undefined : swapPriceUSatPerToken,
|
|
78
|
+
swapPriceUSatPerToken
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Checks whether the swap amounts are valid given the current market rate for a given pair
|
|
84
|
+
*
|
|
85
|
+
* @param chainIdentifier
|
|
86
|
+
* @param amountSats Amount of sats (BTC) to be received from the swap
|
|
87
|
+
* @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
|
|
88
|
+
* @param feePPM PPM fee rate as reported by the intermediary
|
|
89
|
+
* @param paidToken Amount of token to be paid to the swap
|
|
90
|
+
* @param token
|
|
91
|
+
* @param abortSignal
|
|
92
|
+
* @param preFetchedPrice Already pre-fetched price
|
|
93
|
+
*/
|
|
94
|
+
public async isValidAmountSend<C extends ChainIds<T>>(
|
|
95
|
+
chainIdentifier: C,
|
|
96
|
+
amountSats: bigint,
|
|
97
|
+
satsBaseFee: bigint,
|
|
98
|
+
feePPM: bigint,
|
|
99
|
+
paidToken: bigint,
|
|
100
|
+
token: string,
|
|
101
|
+
abortSignal?: AbortSignal,
|
|
102
|
+
preFetchedPrice?: bigint | null
|
|
103
|
+
): Promise<PriceInfoType> {
|
|
104
|
+
const totalSats = (amountSats * (1000000n + feePPM) / 1000000n)
|
|
105
|
+
+ satsBaseFee;
|
|
106
|
+
const totalUSats = totalSats * 1000000n;
|
|
107
|
+
const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / paidToken;
|
|
108
|
+
|
|
109
|
+
if(this.shouldIgnore(chainIdentifier, token)) return {
|
|
110
|
+
isValid: true,
|
|
111
|
+
differencePPM: 0n,
|
|
112
|
+
satsBaseFee,
|
|
113
|
+
feePPM,
|
|
114
|
+
realPriceUSatPerToken: undefined,
|
|
115
|
+
swapPriceUSatPerToken
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats, token, abortSignal, preFetchedPrice);
|
|
119
|
+
const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / calculatedAmtInToken;
|
|
120
|
+
|
|
121
|
+
const difference = paidToken - calculatedAmtInToken; //Will be >0 if we need to pay more than we should've
|
|
122
|
+
const differencePPM = difference * 1000000n / calculatedAmtInToken;
|
|
123
|
+
|
|
124
|
+
return {
|
|
125
|
+
isValid: differencePPM <= this.maxAllowedFeeDifferencePPM,
|
|
126
|
+
differencePPM,
|
|
127
|
+
satsBaseFee,
|
|
128
|
+
feePPM,
|
|
129
|
+
realPriceUSatPerToken,
|
|
130
|
+
swapPriceUSatPerToken
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Recomputes pricing info without fetching the current price
|
|
136
|
+
*
|
|
137
|
+
* @param chainIdentifier
|
|
138
|
+
* @param amountSats
|
|
139
|
+
* @param satsBaseFee
|
|
140
|
+
* @param feePPM
|
|
141
|
+
* @param receiveToken
|
|
142
|
+
* @param token
|
|
143
|
+
*/
|
|
144
|
+
public recomputePriceInfoReceive<C extends ChainIds<T>>(
|
|
145
|
+
chainIdentifier: C,
|
|
146
|
+
amountSats: bigint,
|
|
147
|
+
satsBaseFee: bigint,
|
|
148
|
+
feePPM: bigint,
|
|
149
|
+
receiveToken: bigint,
|
|
150
|
+
token: string,
|
|
151
|
+
): PriceInfoType {
|
|
152
|
+
const totalSats = (amountSats * (1000000n - feePPM) / 1000000n)
|
|
153
|
+
- satsBaseFee;
|
|
154
|
+
const totalUSats = totalSats * 1000000n;
|
|
155
|
+
const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / receiveToken;
|
|
156
|
+
|
|
157
|
+
return {
|
|
158
|
+
isValid: true,
|
|
159
|
+
differencePPM: 0n,
|
|
160
|
+
satsBaseFee,
|
|
161
|
+
feePPM,
|
|
162
|
+
realPriceUSatPerToken: this.shouldIgnore(chainIdentifier, token) ? undefined : swapPriceUSatPerToken,
|
|
163
|
+
swapPriceUSatPerToken
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Checks whether the swap amounts are valid given the current market rate for a given pair
|
|
169
|
+
*
|
|
170
|
+
* @param chainIdentifier
|
|
171
|
+
* @param amountSats Amount of sats (BTC) to be paid to the swap
|
|
172
|
+
* @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
|
|
173
|
+
* @param feePPM PPM fee rate as reported by the intermediary
|
|
174
|
+
* @param receiveToken Amount of token to be received from the swap
|
|
175
|
+
* @param token
|
|
176
|
+
* @param abortSignal
|
|
177
|
+
* @param preFetchedPrice Already pre-fetched price
|
|
178
|
+
*/
|
|
179
|
+
public async isValidAmountReceive<C extends ChainIds<T>>(
|
|
180
|
+
chainIdentifier: C,
|
|
181
|
+
amountSats: bigint,
|
|
182
|
+
satsBaseFee: bigint,
|
|
183
|
+
feePPM: bigint,
|
|
184
|
+
receiveToken: bigint,
|
|
185
|
+
token: string,
|
|
186
|
+
abortSignal?: AbortSignal,
|
|
187
|
+
preFetchedPrice?: bigint | null
|
|
188
|
+
): Promise<PriceInfoType> {
|
|
189
|
+
const totalSats = (amountSats * (1000000n - feePPM) / 1000000n)
|
|
190
|
+
- satsBaseFee;
|
|
191
|
+
const totalUSats = totalSats * 1000000n;
|
|
192
|
+
const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / receiveToken;
|
|
193
|
+
|
|
194
|
+
if(this.shouldIgnore(chainIdentifier, token)) return {
|
|
195
|
+
isValid: true,
|
|
196
|
+
differencePPM: 0n,
|
|
197
|
+
satsBaseFee,
|
|
198
|
+
feePPM,
|
|
199
|
+
realPriceUSatPerToken: undefined,
|
|
200
|
+
swapPriceUSatPerToken
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats, token, abortSignal, preFetchedPrice);
|
|
204
|
+
const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / calculatedAmtInToken;
|
|
205
|
+
|
|
206
|
+
const difference = calculatedAmtInToken - receiveToken; //Will be >0 if we receive less than we should've
|
|
207
|
+
const differencePPM = difference * 100000n / calculatedAmtInToken;
|
|
208
|
+
|
|
209
|
+
return {
|
|
210
|
+
isValid: differencePPM <= this.maxAllowedFeeDifferencePPM,
|
|
211
|
+
differencePPM,
|
|
212
|
+
satsBaseFee,
|
|
213
|
+
feePPM,
|
|
214
|
+
realPriceUSatPerToken,
|
|
215
|
+
swapPriceUSatPerToken
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
public preFetchPrice<C extends ChainIds<T>>(chainIdentifier: C, token: string, abortSignal?: AbortSignal): Promise<bigint> {
|
|
220
|
+
return this.getPrice(chainIdentifier, token, abortSignal);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
public preFetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
224
|
+
return this.getUsdPrice(abortSignal);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Returns amount of {toToken} that are equivalent to {fromAmount} satoshis
|
|
229
|
+
*
|
|
230
|
+
* @param chainIdentifier
|
|
231
|
+
* @param fromAmount Amount of satoshis
|
|
232
|
+
* @param toToken Token
|
|
233
|
+
* @param abortSignal
|
|
234
|
+
* @param preFetchedPrice
|
|
235
|
+
* @throws {Error} when token is not found
|
|
236
|
+
*/
|
|
237
|
+
public async getFromBtcSwapAmount<C extends ChainIds<T>>(
|
|
238
|
+
chainIdentifier: C,
|
|
239
|
+
fromAmount: bigint,
|
|
240
|
+
toToken: string,
|
|
241
|
+
abortSignal?: AbortSignal,
|
|
242
|
+
preFetchedPrice?: bigint | null
|
|
243
|
+
): Promise<bigint> {
|
|
244
|
+
if(this.getDecimals(chainIdentifier, toToken.toString())==null) throw new Error("Token not found!");
|
|
245
|
+
|
|
246
|
+
const price = preFetchedPrice || await this.getPrice(chainIdentifier, toToken, abortSignal);
|
|
247
|
+
|
|
248
|
+
return fromAmount
|
|
249
|
+
* (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, toToken.toString())))
|
|
250
|
+
* (1000000n) //To usat
|
|
251
|
+
/ (price);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Returns amount of satoshis that are equivalent to {fromAmount} of {fromToken}
|
|
256
|
+
*
|
|
257
|
+
* @param chainIdentifier
|
|
258
|
+
* @param fromAmount Amount of the token
|
|
259
|
+
* @param fromToken Token
|
|
260
|
+
* @param abortSignal
|
|
261
|
+
* @param preFetchedPrice Pre-fetched swap price if available
|
|
262
|
+
* @throws {Error} when token is not found
|
|
263
|
+
*/
|
|
264
|
+
public async getToBtcSwapAmount<C extends ChainIds<T>>(
|
|
265
|
+
chainIdentifier: C,
|
|
266
|
+
fromAmount: bigint,
|
|
267
|
+
fromToken: string,
|
|
268
|
+
abortSignal?: AbortSignal,
|
|
269
|
+
preFetchedPrice?: bigint
|
|
270
|
+
): Promise<bigint> {
|
|
271
|
+
if(this.getDecimals(chainIdentifier, fromToken.toString())==null) throw new Error("Token not found");
|
|
272
|
+
|
|
273
|
+
const price = preFetchedPrice || await this.getPrice(chainIdentifier, fromToken, abortSignal);
|
|
274
|
+
|
|
275
|
+
return fromAmount
|
|
276
|
+
* price
|
|
277
|
+
/ 1000000n
|
|
278
|
+
/ (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, fromToken.toString())));
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Returns whether the token should be ignored and pricing for it not calculated
|
|
283
|
+
* @param chainIdentifier
|
|
284
|
+
* @param tokenAddress
|
|
285
|
+
* @throws {Error} if token is not found
|
|
286
|
+
*/
|
|
287
|
+
public shouldIgnore<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string): boolean {
|
|
288
|
+
const coin = this.getDecimals(chainIdentifier, tokenAddress.toString());
|
|
289
|
+
if(coin==null) throw new Error("Token not found");
|
|
290
|
+
return coin===-1;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
public async getBtcUsdValue(
|
|
294
|
+
btcSats: bigint,
|
|
295
|
+
abortSignal?: AbortSignal,
|
|
296
|
+
preFetchedPrice?: number
|
|
297
|
+
): Promise<number> {
|
|
298
|
+
return Number(btcSats)*(preFetchedPrice || await this.getUsdPrice(abortSignal));
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
public async getTokenUsdValue<C extends ChainIds<T>>(
|
|
302
|
+
chainId: C,
|
|
303
|
+
tokenAmount: bigint,
|
|
304
|
+
token: string,
|
|
305
|
+
abortSignal?: AbortSignal,
|
|
306
|
+
preFetchedPrice?: number
|
|
307
|
+
): Promise<number> {
|
|
308
|
+
const [btcAmount, usdPrice] = await Promise.all([
|
|
309
|
+
this.getToBtcSwapAmount(chainId, tokenAmount, token, abortSignal),
|
|
310
|
+
preFetchedPrice==null ? this.preFetchUsdPrice(abortSignal) : Promise.resolve(preFetchedPrice)
|
|
311
|
+
]);
|
|
312
|
+
return Number(btcAmount)*usdPrice;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
public getUsdValue<C extends ChainIds<T>>(
|
|
316
|
+
amount: bigint,
|
|
317
|
+
token: Token<C>,
|
|
318
|
+
abortSignal?: AbortSignal,
|
|
319
|
+
preFetchedUsdPrice?: number
|
|
320
|
+
): Promise<number> {
|
|
321
|
+
if(token.chain==="BTC") {
|
|
322
|
+
return this.getBtcUsdValue(amount, abortSignal, preFetchedUsdPrice);
|
|
323
|
+
} else {
|
|
324
|
+
return this.getTokenUsdValue(token.chainId, amount, token.address, abortSignal, preFetchedUsdPrice);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import {CtorCoinTypes} from "../abstract/IPriceProvider";
|
|
2
|
+
import {ExchangePriceProvider} from "./abstract/ExchangePriceProvider";
|
|
3
|
+
import {MultiChain} from "../../swapper/Swapper";
|
|
4
|
+
import {httpGet} from "../../http/HttpUtils";
|
|
5
|
+
|
|
6
|
+
export type BinanceResponse = {
|
|
7
|
+
symbol: string;
|
|
8
|
+
price: string;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Price provider using Binance exchange API
|
|
13
|
+
* @category Pricing and LPs
|
|
14
|
+
*/
|
|
15
|
+
export class BinancePriceProvider<T extends MultiChain> extends ExchangePriceProvider<T> {
|
|
16
|
+
|
|
17
|
+
constructor(coinsMap: CtorCoinTypes<T>, url: string = "https://api.binance.com/api/v3", httpRequestTimeout?: number) {
|
|
18
|
+
super(coinsMap, url, httpRequestTimeout);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
protected async fetchPair(pair: string, abortSignal?: AbortSignal) {
|
|
22
|
+
const response = await httpGet<BinanceResponse>(
|
|
23
|
+
this.url+"/ticker/price?symbol="+pair,
|
|
24
|
+
this.httpRequestTimeout,
|
|
25
|
+
abortSignal
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
return parseFloat(response.price);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
32
|
+
const response = await httpGet<BinanceResponse>(
|
|
33
|
+
this.url+"/ticker/price?symbol=BTCUSDC",
|
|
34
|
+
this.httpRequestTimeout,
|
|
35
|
+
abortSignal
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
return parseFloat(response.price)/100000000;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import {CoinType, CtorCoinTypes} from "../abstract/IPriceProvider";
|
|
2
|
+
import {HttpPriceProvider} from "./abstract/HttpPriceProvider";
|
|
3
|
+
import {MultiChain} from "../../swapper/Swapper";
|
|
4
|
+
import {httpGet} from "../../http/HttpUtils";
|
|
5
|
+
|
|
6
|
+
export type CoinGeckoResponse<Currency extends string> = {
|
|
7
|
+
[coinId: string]: {[c in Currency]: number}
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Price provider using CoinGecko API
|
|
12
|
+
* @category Pricing and LPs
|
|
13
|
+
*/
|
|
14
|
+
export class CoinGeckoPriceProvider<T extends MultiChain> extends HttpPriceProvider<T> {
|
|
15
|
+
|
|
16
|
+
constructor(coinsMap: CtorCoinTypes<T>, url: string = "https://api.coingecko.com/api/v3", httpRequestTimeout?: number) {
|
|
17
|
+
super(coinsMap, url, httpRequestTimeout);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
|
|
21
|
+
let response = await httpGet<CoinGeckoResponse<"sats">>(
|
|
22
|
+
this.url+"/simple/price?ids="+token.coinId+"&vs_currencies=sats&precision=6",
|
|
23
|
+
this.httpRequestTimeout,
|
|
24
|
+
abortSignal
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
return BigInt(response[token.coinId].sats*1000000);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
31
|
+
let response = await httpGet<CoinGeckoResponse<"usd">>(
|
|
32
|
+
this.url+"/simple/price?ids=bitcoin&vs_currencies=usd&precision=9",
|
|
33
|
+
this.httpRequestTimeout,
|
|
34
|
+
abortSignal
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
return response["bitcoin"].usd/100000000;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import {CoinType, CtorCoinTypes} from "../abstract/IPriceProvider";
|
|
2
|
+
import {HttpPriceProvider} from "./abstract/HttpPriceProvider";
|
|
3
|
+
import {MultiChain} from "../../swapper/Swapper";
|
|
4
|
+
import {httpGet} from "../../http/HttpUtils";
|
|
5
|
+
|
|
6
|
+
export type CoinPaprikaResponse<Currency extends string> = {
|
|
7
|
+
quotes: {
|
|
8
|
+
[curr in Currency]: {
|
|
9
|
+
price: number
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Price provider using CoinPaprika API
|
|
16
|
+
* @category Pricing and LPs
|
|
17
|
+
*/
|
|
18
|
+
export class CoinPaprikaPriceProvider<T extends MultiChain> extends HttpPriceProvider<T> {
|
|
19
|
+
|
|
20
|
+
constructor(coinsMap: CtorCoinTypes<T>, url: string = "https://api.coinpaprika.com/v1", httpRequestTimeout?: number) {
|
|
21
|
+
super(coinsMap, url, httpRequestTimeout);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async fetchPrice(token: CoinType, abortSignal?: AbortSignal) {
|
|
25
|
+
const response = await httpGet<CoinPaprikaResponse<"BTC">>(
|
|
26
|
+
this.url+"/tickers/"+token.coinId+"?quotes=BTC",
|
|
27
|
+
this.httpRequestTimeout,
|
|
28
|
+
abortSignal
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
return BigInt(Math.floor(response.quotes.BTC.price*100000000000000));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
35
|
+
const response = await httpGet<CoinPaprikaResponse<"USD">>(
|
|
36
|
+
this.url+"/tickers/btc-bitcoin?quotes=USD",
|
|
37
|
+
this.httpRequestTimeout,
|
|
38
|
+
abortSignal
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
return response.quotes.USD.price/100000000;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {CoinType, CtorCoinTypes, IPriceProvider} from "../abstract/IPriceProvider";
|
|
2
|
+
import {MultiChain} from "../../swapper/Swapper";
|
|
3
|
+
import {CustomPriceFunction} from "../../types/CustomPriceFunction";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Price provider using custom pricing function
|
|
7
|
+
* @category Pricing and LPs
|
|
8
|
+
*/
|
|
9
|
+
export class CustomPriceProvider<T extends MultiChain> extends IPriceProvider<T> {
|
|
10
|
+
|
|
11
|
+
readonly getUsdPriceFn: CustomPriceFunction;
|
|
12
|
+
|
|
13
|
+
constructor(coinsMap: CtorCoinTypes<T>, getUsdPriceFn: CustomPriceFunction) {
|
|
14
|
+
super(coinsMap);
|
|
15
|
+
this.getUsdPriceFn = getUsdPriceFn;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
|
|
19
|
+
const [btcPrice, tokenPrice] = await this.getUsdPriceFn(["BTC",token.coinId], abortSignal);
|
|
20
|
+
const priceInBtc = tokenPrice / btcPrice;
|
|
21
|
+
return BigInt(Math.floor(priceInBtc*100_000_000*1_000_000));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
25
|
+
const [btcPrice] = await this.getUsdPriceFn(["BTC"], abortSignal);
|
|
26
|
+
return btcPrice / 100_000_000;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import {CoinType, CtorCoinTypes} from "../abstract/IPriceProvider";
|
|
2
|
+
import {ExchangePriceProvider} from "./abstract/ExchangePriceProvider";
|
|
3
|
+
import {MultiChain} from "../../swapper/Swapper";
|
|
4
|
+
import {httpGet} from "../../http/HttpUtils";
|
|
5
|
+
|
|
6
|
+
export type KrakenResponse = {
|
|
7
|
+
error: string[];
|
|
8
|
+
result: {
|
|
9
|
+
[ticker: string]: {
|
|
10
|
+
a: [string, string, string],
|
|
11
|
+
b: [string, string, string],
|
|
12
|
+
c: [string, string],
|
|
13
|
+
v: [string, string],
|
|
14
|
+
p: [string, string],
|
|
15
|
+
t: [number, number],
|
|
16
|
+
l: [string, string],
|
|
17
|
+
h: [string, string],
|
|
18
|
+
o: string
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Price provider using Kraken exchange API
|
|
25
|
+
* @category Pricing and LPs
|
|
26
|
+
*/
|
|
27
|
+
export class KrakenPriceProvider<T extends MultiChain> extends ExchangePriceProvider<T> {
|
|
28
|
+
|
|
29
|
+
constructor(coinsMap: CtorCoinTypes<T>, url: string = "https://api.kraken.com/0", httpRequestTimeout?: number) {
|
|
30
|
+
super(coinsMap, url, httpRequestTimeout);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
protected async fetchPair(pair: string, abortSignal?: AbortSignal) {
|
|
34
|
+
const response = await httpGet<KrakenResponse>(
|
|
35
|
+
this.url+"/public/Ticker?pair="+pair,
|
|
36
|
+
this.httpRequestTimeout,
|
|
37
|
+
abortSignal
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
return parseFloat(response.result[pair].c[0]);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
44
|
+
const response = await httpGet<KrakenResponse>(
|
|
45
|
+
this.url+"/public/Ticker?pair=XBTUSDC",
|
|
46
|
+
this.httpRequestTimeout,
|
|
47
|
+
abortSignal
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
return parseFloat(response.result["XBTUSDC"].c[0])/100000000;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
|
|
54
|
+
const pairs: string[] = token.coinId.split(";");
|
|
55
|
+
|
|
56
|
+
const response = await httpGet<KrakenResponse>(
|
|
57
|
+
this.url+"/public/Ticker?pair="+pairs.map(val => val.startsWith("!") ? val.substring(1) : val).join(","),
|
|
58
|
+
this.httpRequestTimeout,
|
|
59
|
+
abortSignal
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
const prices: number[] = pairs.map(pair => {
|
|
63
|
+
let invert = pair.startsWith("!");
|
|
64
|
+
if(invert) pair = pair.substring(1);
|
|
65
|
+
const value = parseFloat(response.result[pair].c[0]);
|
|
66
|
+
return invert ? 1/value : value;
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
const price = prices.reduce((previousValue, currentValue) => previousValue * currentValue, 1);
|
|
70
|
+
|
|
71
|
+
return BigInt(Math.floor(price*100000000000000));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import {CtorCoinTypes} from "../abstract/IPriceProvider";
|
|
2
|
+
import {ExchangePriceProvider} from "./abstract/ExchangePriceProvider";
|
|
3
|
+
import {MultiChain} from "../../swapper/Swapper";
|
|
4
|
+
import {httpGet} from "../../http/HttpUtils";
|
|
5
|
+
|
|
6
|
+
export type OKXResponse = {
|
|
7
|
+
code: string;
|
|
8
|
+
msg: string;
|
|
9
|
+
data: [
|
|
10
|
+
{
|
|
11
|
+
instId: string;
|
|
12
|
+
idxPx: string;
|
|
13
|
+
high24h: string;
|
|
14
|
+
sodUtc0: string;
|
|
15
|
+
open24h: string;
|
|
16
|
+
low24h: string;
|
|
17
|
+
sodUtc8: string;
|
|
18
|
+
ts: string;
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Price provider using OKX exchange API
|
|
25
|
+
* @category Pricing and LPs
|
|
26
|
+
*/
|
|
27
|
+
export class OKXPriceProvider<T extends MultiChain> extends ExchangePriceProvider<T> {
|
|
28
|
+
|
|
29
|
+
constructor(coinsMap: CtorCoinTypes<T>, url: string = "https://www.okx.com/api/v5", httpRequestTimeout?: number) {
|
|
30
|
+
super(coinsMap, url, httpRequestTimeout);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async fetchPair(pair: string, abortSignal?: AbortSignal) {
|
|
34
|
+
const response = await httpGet<OKXResponse>(
|
|
35
|
+
this.url+"/market/index-tickers?instId="+pair,
|
|
36
|
+
this.httpRequestTimeout,
|
|
37
|
+
abortSignal
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
return parseFloat(response.data[0].idxPx);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
44
|
+
const response = await httpGet<OKXResponse>(
|
|
45
|
+
this.url+"/market/index-tickers?instId=BTC-USD",
|
|
46
|
+
this.httpRequestTimeout,
|
|
47
|
+
abortSignal
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
return parseFloat(response.data[0].idxPx)/100000000;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {HttpPriceProvider} from "./HttpPriceProvider";
|
|
2
|
+
import {CoinType} from "../../abstract/IPriceProvider";
|
|
3
|
+
import {MultiChain} from "../../../swapper/Swapper";
|
|
4
|
+
|
|
5
|
+
export abstract class ExchangePriceProvider<T extends MultiChain> extends HttpPriceProvider<T> {
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Fetches the price on the specific exchange pair
|
|
9
|
+
*
|
|
10
|
+
* @param pair
|
|
11
|
+
* @param abortSignal
|
|
12
|
+
* @protected
|
|
13
|
+
*/
|
|
14
|
+
protected abstract fetchPair(pair: string, abortSignal?: AbortSignal): Promise<number>;
|
|
15
|
+
|
|
16
|
+
protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
|
|
17
|
+
const pairs: string[] = token.coinId.split(";");
|
|
18
|
+
const prices: number[] = await Promise.all(pairs.map(pair => {
|
|
19
|
+
let invert = pair.startsWith("!");
|
|
20
|
+
if(invert) pair = pair.substring(1);
|
|
21
|
+
return this.fetchPair(pair, abortSignal).then(value => invert ? 1/value : value);
|
|
22
|
+
}));
|
|
23
|
+
|
|
24
|
+
const price = prices.reduce((previousValue, currentValue) => previousValue * currentValue, 1);
|
|
25
|
+
|
|
26
|
+
return BigInt(Math.floor(price*100000000000000));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {CtorCoinTypes, IPriceProvider} from "../../abstract/IPriceProvider";
|
|
2
|
+
import {MultiChain} from "../../../swapper/Swapper";
|
|
3
|
+
|
|
4
|
+
export abstract class HttpPriceProvider<T extends MultiChain> extends IPriceProvider<T> {
|
|
5
|
+
|
|
6
|
+
url: string;
|
|
7
|
+
httpRequestTimeout?: number;
|
|
8
|
+
|
|
9
|
+
protected constructor(coinsMap: CtorCoinTypes<T>, url: string, httpRequestTimeout?: number) {
|
|
10
|
+
super(coinsMap);
|
|
11
|
+
this.url = url;
|
|
12
|
+
this.httpRequestTimeout = httpRequestTimeout;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
}
|