@atomiqlabs/sdk 7.0.11 → 8.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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} +40 -22
- 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} +116 -75
- 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,37 @@
|
|
|
1
|
+
import { IToBTCSwap, ToBTCSwapState } from "./IToBTCSwap";
|
|
2
|
+
import { ChainType, ClaimEvent, InitializeEvent, RefundEvent } from "@atomiqlabs/base";
|
|
3
|
+
import { ISwapWrapperOptions, SwapTypeDefinition } from "../../ISwapWrapper";
|
|
4
|
+
import { Intermediary, SingleChainReputationType } from "../../../intermediaries/Intermediary";
|
|
5
|
+
import { IEscrowSwapWrapper } from "../IEscrowSwapWrapper";
|
|
6
|
+
import { AmountData } from "../../../types/AmountData";
|
|
7
|
+
export type IToBTCDefinition<T extends ChainType, W extends IToBTCWrapper<T, any>, S extends IToBTCSwap<T>> = SwapTypeDefinition<T, W, S>;
|
|
8
|
+
export declare abstract class IToBTCWrapper<T extends ChainType, D extends IToBTCDefinition<T, IToBTCWrapper<T, D>, IToBTCSwap<T, D>>, O extends ISwapWrapperOptions = ISwapWrapperOptions> extends IEscrowSwapWrapper<T, D, O> {
|
|
9
|
+
/**
|
|
10
|
+
* Pre-fetches intermediary's reputation, doesn't throw, instead aborts via abortController and returns null
|
|
11
|
+
*
|
|
12
|
+
* @param amountData
|
|
13
|
+
* @param lp Intermediary
|
|
14
|
+
* @param abortController
|
|
15
|
+
* @protected
|
|
16
|
+
* @returns Intermediary's reputation or null if failed
|
|
17
|
+
* @throws {IntermediaryError} If the intermediary vault doesn't exist
|
|
18
|
+
*/
|
|
19
|
+
protected preFetchIntermediaryReputation(amountData: Omit<AmountData, "amount">, lp: Intermediary, abortController: AbortController): Promise<SingleChainReputationType | undefined>;
|
|
20
|
+
/**
|
|
21
|
+
* Pre-fetches feeRate for a given swap
|
|
22
|
+
*
|
|
23
|
+
* @param signer Address of the swap initiator
|
|
24
|
+
* @param amountData
|
|
25
|
+
* @param claimHash optional hash of the swap or null
|
|
26
|
+
* @param abortController
|
|
27
|
+
* @protected
|
|
28
|
+
* @returns Fee rate
|
|
29
|
+
*/
|
|
30
|
+
protected preFetchFeeRate(signer: string, amountData: Omit<AmountData, "amount">, claimHash: string | undefined, abortController: AbortController): Promise<string | undefined>;
|
|
31
|
+
readonly pendingSwapStates: ToBTCSwapState[];
|
|
32
|
+
readonly tickSwapState: ToBTCSwapState[];
|
|
33
|
+
readonly refundableSwapStates: ToBTCSwapState[];
|
|
34
|
+
protected processEventInitialize(swap: D["Swap"], event: InitializeEvent<T["Data"]>): Promise<boolean>;
|
|
35
|
+
protected processEventClaim(swap: D["Swap"], event: ClaimEvent<T["Data"]>): Promise<boolean>;
|
|
36
|
+
protected processEventRefund(swap: D["Swap"], event: RefundEvent<T["Data"]>): Promise<boolean>;
|
|
37
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IToBTCWrapper = void 0;
|
|
4
|
+
const IToBTCSwap_1 = require("./IToBTCSwap");
|
|
5
|
+
const IntermediaryError_1 = require("../../../errors/IntermediaryError");
|
|
6
|
+
const IEscrowSwapWrapper_1 = require("../IEscrowSwapWrapper");
|
|
7
|
+
class IToBTCWrapper extends IEscrowSwapWrapper_1.IEscrowSwapWrapper {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.pendingSwapStates = [
|
|
11
|
+
IToBTCSwap_1.ToBTCSwapState.CREATED,
|
|
12
|
+
IToBTCSwap_1.ToBTCSwapState.QUOTE_SOFT_EXPIRED,
|
|
13
|
+
IToBTCSwap_1.ToBTCSwapState.COMMITED,
|
|
14
|
+
IToBTCSwap_1.ToBTCSwapState.SOFT_CLAIMED,
|
|
15
|
+
IToBTCSwap_1.ToBTCSwapState.REFUNDABLE
|
|
16
|
+
];
|
|
17
|
+
this.tickSwapState = [IToBTCSwap_1.ToBTCSwapState.CREATED, IToBTCSwap_1.ToBTCSwapState.COMMITED, IToBTCSwap_1.ToBTCSwapState.SOFT_CLAIMED];
|
|
18
|
+
this.refundableSwapStates = [IToBTCSwap_1.ToBTCSwapState.REFUNDABLE];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Pre-fetches intermediary's reputation, doesn't throw, instead aborts via abortController and returns null
|
|
22
|
+
*
|
|
23
|
+
* @param amountData
|
|
24
|
+
* @param lp Intermediary
|
|
25
|
+
* @param abortController
|
|
26
|
+
* @protected
|
|
27
|
+
* @returns Intermediary's reputation or null if failed
|
|
28
|
+
* @throws {IntermediaryError} If the intermediary vault doesn't exist
|
|
29
|
+
*/
|
|
30
|
+
preFetchIntermediaryReputation(amountData, lp, abortController) {
|
|
31
|
+
return lp.getReputation(this.chainIdentifier, this.contract, [amountData.token.toString()], abortController.signal).then(res => {
|
|
32
|
+
if (res == null)
|
|
33
|
+
throw new IntermediaryError_1.IntermediaryError("Invalid data returned - invalid LP vault");
|
|
34
|
+
return res;
|
|
35
|
+
}).catch(e => {
|
|
36
|
+
this.logger.warn("preFetchIntermediaryReputation(): Error: ", e);
|
|
37
|
+
abortController.abort(e);
|
|
38
|
+
return undefined;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Pre-fetches feeRate for a given swap
|
|
43
|
+
*
|
|
44
|
+
* @param signer Address of the swap initiator
|
|
45
|
+
* @param amountData
|
|
46
|
+
* @param claimHash optional hash of the swap or null
|
|
47
|
+
* @param abortController
|
|
48
|
+
* @protected
|
|
49
|
+
* @returns Fee rate
|
|
50
|
+
*/
|
|
51
|
+
preFetchFeeRate(signer, amountData, claimHash, abortController) {
|
|
52
|
+
return this.contract.getInitPayInFeeRate(signer, this.chain.randomAddress(), amountData.token, claimHash)
|
|
53
|
+
.catch(e => {
|
|
54
|
+
this.logger.warn("preFetchFeeRate(): Error: ", e);
|
|
55
|
+
abortController.abort(e);
|
|
56
|
+
return undefined;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async processEventInitialize(swap, event) {
|
|
60
|
+
if (swap.state === IToBTCSwap_1.ToBTCSwapState.CREATED || swap.state === IToBTCSwap_1.ToBTCSwapState.QUOTE_SOFT_EXPIRED) {
|
|
61
|
+
swap.state = IToBTCSwap_1.ToBTCSwapState.COMMITED;
|
|
62
|
+
if (swap.commitTxId == null)
|
|
63
|
+
swap.commitTxId = event.meta?.txId;
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
async processEventClaim(swap, event) {
|
|
69
|
+
if (swap.state !== IToBTCSwap_1.ToBTCSwapState.REFUNDED && swap.state !== IToBTCSwap_1.ToBTCSwapState.CLAIMED) {
|
|
70
|
+
await swap._setPaymentResult({
|
|
71
|
+
secret: event.result,
|
|
72
|
+
txId: Buffer.from(event.result, "hex").reverse().toString("hex")
|
|
73
|
+
}).catch(e => {
|
|
74
|
+
this.logger.warn(`processEventClaim(): Failed to set payment result ${event.result}: `, e);
|
|
75
|
+
});
|
|
76
|
+
swap.state = IToBTCSwap_1.ToBTCSwapState.CLAIMED;
|
|
77
|
+
if (swap.claimTxId == null)
|
|
78
|
+
swap.claimTxId = event.meta?.txId;
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
processEventRefund(swap, event) {
|
|
84
|
+
if (swap.state !== IToBTCSwap_1.ToBTCSwapState.CLAIMED && swap.state !== IToBTCSwap_1.ToBTCSwapState.REFUNDED) {
|
|
85
|
+
swap.state = IToBTCSwap_1.ToBTCSwapState.REFUNDED;
|
|
86
|
+
if (swap.refundTxId == null)
|
|
87
|
+
swap.refundTxId = event.meta?.txId;
|
|
88
|
+
return Promise.resolve(true);
|
|
89
|
+
}
|
|
90
|
+
return Promise.resolve(false);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.IToBTCWrapper = IToBTCWrapper;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { ToBTCLNDefinition, ToBTCLNWrapper } from "./ToBTCLNWrapper";
|
|
4
|
+
import { IToBTCSwap, IToBTCSwapInit } from "../IToBTCSwap";
|
|
5
|
+
import { SwapType } from "../../../../enums/SwapType";
|
|
6
|
+
import { ChainType, SwapData } from "@atomiqlabs/base";
|
|
7
|
+
import { Buffer } from "buffer";
|
|
8
|
+
import { LNURLPaySuccessAction } from "../../../../lnurl/LNURL";
|
|
9
|
+
import { TokenAmount } from "../../../../types/TokenAmount";
|
|
10
|
+
import { BtcToken } from "../../../../types/Token";
|
|
11
|
+
import { LoggerType } from "../../../../utils/Logger";
|
|
12
|
+
import { LNURLDecodedSuccessAction } from "../../../../types/lnurl/LNURLPay";
|
|
13
|
+
export type ToBTCLNSwapInit<T extends SwapData> = IToBTCSwapInit<T> & {
|
|
14
|
+
confidence: number;
|
|
15
|
+
pr?: string;
|
|
16
|
+
lnurl?: string;
|
|
17
|
+
successAction?: LNURLPaySuccessAction;
|
|
18
|
+
};
|
|
19
|
+
export declare function isToBTCLNSwapInit<T extends SwapData>(obj: any): obj is ToBTCLNSwapInit<T>;
|
|
20
|
+
/**
|
|
21
|
+
* Smart Chain to Lightning Network BTC swap
|
|
22
|
+
* @category Swaps
|
|
23
|
+
*/
|
|
24
|
+
export declare class ToBTCLNSwap<T extends ChainType = ChainType> extends IToBTCSwap<T, ToBTCLNDefinition<T>> {
|
|
25
|
+
private readonly usesClaimHashAsId;
|
|
26
|
+
protected outputToken: BtcToken<true>;
|
|
27
|
+
protected readonly TYPE = SwapType.TO_BTCLN;
|
|
28
|
+
protected readonly logger: LoggerType;
|
|
29
|
+
private readonly confidence;
|
|
30
|
+
private readonly pr?;
|
|
31
|
+
readonly paymentHash?: string;
|
|
32
|
+
lnurl?: string;
|
|
33
|
+
successAction?: LNURLPaySuccessAction;
|
|
34
|
+
private secret?;
|
|
35
|
+
constructor(wrapper: ToBTCLNWrapper<T>, init: ToBTCLNSwapInit<T["Data"]>);
|
|
36
|
+
constructor(wrapper: ToBTCLNWrapper<T>, obj: any);
|
|
37
|
+
_setPaymentResult(result: {
|
|
38
|
+
secret?: string;
|
|
39
|
+
txId?: string;
|
|
40
|
+
}, check?: boolean): Promise<boolean>;
|
|
41
|
+
getOutputToken(): BtcToken<true>;
|
|
42
|
+
getOutput(): TokenAmount<T["ChainId"], BtcToken<true>> | null;
|
|
43
|
+
getOutputTxId(): string | null;
|
|
44
|
+
/**
|
|
45
|
+
* Returns the lightning BOLT11 invoice where the BTC will be sent to
|
|
46
|
+
*/
|
|
47
|
+
getOutputAddress(): string | null;
|
|
48
|
+
/**
|
|
49
|
+
* Returns payment secret (pre-image) as a proof of payment
|
|
50
|
+
*/
|
|
51
|
+
getSecret(): string | null;
|
|
52
|
+
/**
|
|
53
|
+
* Returns the confidence of the intermediary that this payment will succeed
|
|
54
|
+
* Value between 0 and 1, where 0 is not likely and 1 is very likely
|
|
55
|
+
*/
|
|
56
|
+
getConfidence(): number;
|
|
57
|
+
/**
|
|
58
|
+
* Checks whether a swap is likely to fail, based on the confidence as reported by the LP
|
|
59
|
+
*/
|
|
60
|
+
willLikelyFail(): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Tries to detect if the target lightning invoice is a non-custodial mobile wallet, care must be taken
|
|
63
|
+
* for such a wallet to be online when attempting to make a swap
|
|
64
|
+
*/
|
|
65
|
+
isPayingToNonCustodialWallet(): boolean;
|
|
66
|
+
getIdentifierHash(): Buffer;
|
|
67
|
+
getPaymentHash(): Buffer | null;
|
|
68
|
+
protected getLpIdentifier(): string;
|
|
69
|
+
/**
|
|
70
|
+
* Is this an LNURL-pay swap?
|
|
71
|
+
*/
|
|
72
|
+
isLNURL(): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Gets the used LNURL or null if this is not an LNURL-pay swap
|
|
75
|
+
*/
|
|
76
|
+
getLNURL(): string | null;
|
|
77
|
+
/**
|
|
78
|
+
* Checks whether this LNURL payment contains a success message
|
|
79
|
+
*/
|
|
80
|
+
hasSuccessAction(): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Returns the success action after a successful payment, else null
|
|
83
|
+
*/
|
|
84
|
+
getSuccessAction(): LNURLDecodedSuccessAction | null;
|
|
85
|
+
serialize(): any;
|
|
86
|
+
}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ToBTCLNSwap = exports.isToBTCLNSwapInit = void 0;
|
|
4
|
+
const bolt11_1 = require("@atomiqlabs/bolt11");
|
|
5
|
+
const IToBTCSwap_1 = require("../IToBTCSwap");
|
|
6
|
+
const SwapType_1 = require("../../../../enums/SwapType");
|
|
7
|
+
const buffer_1 = require("buffer");
|
|
8
|
+
const sha2_1 = require("@noble/hashes/sha2");
|
|
9
|
+
const IntermediaryError_1 = require("../../../../errors/IntermediaryError");
|
|
10
|
+
const LNURL_1 = require("../../../../lnurl/LNURL");
|
|
11
|
+
const TokenAmount_1 = require("../../../../types/TokenAmount");
|
|
12
|
+
const Token_1 = require("../../../../types/Token");
|
|
13
|
+
const Logger_1 = require("../../../../utils/Logger");
|
|
14
|
+
function isToBTCLNSwapInit(obj) {
|
|
15
|
+
return typeof (obj.confidence) === "number" &&
|
|
16
|
+
(obj.pr == null || typeof (obj.pr) === "string") &&
|
|
17
|
+
(obj.lnurl == null || typeof (obj.lnurl) === "string") &&
|
|
18
|
+
(obj.successAction == null || (0, LNURL_1.isLNURLPaySuccessAction)(obj.successAction)) &&
|
|
19
|
+
(0, IToBTCSwap_1.isIToBTCSwapInit)(obj);
|
|
20
|
+
}
|
|
21
|
+
exports.isToBTCLNSwapInit = isToBTCLNSwapInit;
|
|
22
|
+
//Set of nodes which disallow probing, resulting in 0 confidence reported by the LP
|
|
23
|
+
const SNOWFLAKE_LIST = new Set([
|
|
24
|
+
"038f8f113c580048d847d6949371726653e02b928196bad310e3eda39ff61723f6",
|
|
25
|
+
"03a6ce61fcaacd38d31d4e3ce2d506602818e3856b4b44faff1dde9642ba705976"
|
|
26
|
+
]);
|
|
27
|
+
/**
|
|
28
|
+
* Smart Chain to Lightning Network BTC swap
|
|
29
|
+
* @category Swaps
|
|
30
|
+
*/
|
|
31
|
+
class ToBTCLNSwap extends IToBTCSwap_1.IToBTCSwap {
|
|
32
|
+
constructor(wrapper, initOrObj) {
|
|
33
|
+
if (isToBTCLNSwapInit(initOrObj) && initOrObj.url != null)
|
|
34
|
+
initOrObj.url += "/tobtcln";
|
|
35
|
+
super(wrapper, initOrObj);
|
|
36
|
+
this.outputToken = Token_1.BitcoinTokens.BTCLN;
|
|
37
|
+
this.TYPE = SwapType_1.SwapType.TO_BTCLN;
|
|
38
|
+
if (isToBTCLNSwapInit(initOrObj)) {
|
|
39
|
+
this.confidence = initOrObj.confidence;
|
|
40
|
+
this.pr = initOrObj.pr;
|
|
41
|
+
this.lnurl = initOrObj.lnurl;
|
|
42
|
+
this.successAction = initOrObj.successAction;
|
|
43
|
+
this.usesClaimHashAsId = true;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
this.confidence = initOrObj.confidence;
|
|
47
|
+
this.pr = initOrObj.pr;
|
|
48
|
+
this.lnurl = initOrObj.lnurl;
|
|
49
|
+
this.successAction = initOrObj.successAction;
|
|
50
|
+
this.secret = initOrObj.secret;
|
|
51
|
+
this.usesClaimHashAsId = initOrObj.usesClaimHashAsId ?? false;
|
|
52
|
+
}
|
|
53
|
+
const paymentHash = this.getPaymentHash();
|
|
54
|
+
if (paymentHash != null)
|
|
55
|
+
this.paymentHash = paymentHash.toString("hex");
|
|
56
|
+
this.logger = (0, Logger_1.getLogger)("ToBTCLN(" + this.getIdentifierHashString() + "): ");
|
|
57
|
+
this.tryRecomputeSwapPrice();
|
|
58
|
+
}
|
|
59
|
+
_setPaymentResult(result, check = false) {
|
|
60
|
+
if (result == null)
|
|
61
|
+
return Promise.resolve(false);
|
|
62
|
+
if (result.secret == null)
|
|
63
|
+
throw new IntermediaryError_1.IntermediaryError("No payment secret returned!");
|
|
64
|
+
if (check) {
|
|
65
|
+
const secretBuffer = buffer_1.Buffer.from(result.secret, "hex");
|
|
66
|
+
const hash = buffer_1.Buffer.from((0, sha2_1.sha256)(secretBuffer));
|
|
67
|
+
const claimHash = this.wrapper.contract.getHashForHtlc(hash);
|
|
68
|
+
const expectedClaimHash = buffer_1.Buffer.from(this.getClaimHash(), "hex");
|
|
69
|
+
if (!claimHash.equals(expectedClaimHash))
|
|
70
|
+
throw new IntermediaryError_1.IntermediaryError("Invalid payment secret returned");
|
|
71
|
+
}
|
|
72
|
+
this.secret = result.secret;
|
|
73
|
+
return Promise.resolve(true);
|
|
74
|
+
}
|
|
75
|
+
//////////////////////////////
|
|
76
|
+
//// Amounts & fees
|
|
77
|
+
getOutputToken() {
|
|
78
|
+
return Token_1.BitcoinTokens.BTCLN;
|
|
79
|
+
}
|
|
80
|
+
getOutput() {
|
|
81
|
+
if (this.pr == null || !this.pr.startsWith("ln"))
|
|
82
|
+
return null;
|
|
83
|
+
const parsedPR = (0, bolt11_1.decode)(this.pr);
|
|
84
|
+
if (parsedPR.millisatoshis == null)
|
|
85
|
+
throw new Error("Swap invoice has no msat amount field!");
|
|
86
|
+
const amount = (BigInt(parsedPR.millisatoshis) + 999n) / 1000n;
|
|
87
|
+
return (0, TokenAmount_1.toTokenAmount)(amount, this.outputToken, this.wrapper.prices, this.pricingInfo);
|
|
88
|
+
}
|
|
89
|
+
//////////////////////////////
|
|
90
|
+
//// Getters & utils
|
|
91
|
+
getOutputTxId() {
|
|
92
|
+
return this.getLpIdentifier();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Returns the lightning BOLT11 invoice where the BTC will be sent to
|
|
96
|
+
*/
|
|
97
|
+
getOutputAddress() {
|
|
98
|
+
return this.lnurl ?? this.pr ?? null;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Returns payment secret (pre-image) as a proof of payment
|
|
102
|
+
*/
|
|
103
|
+
getSecret() {
|
|
104
|
+
return this.secret ?? null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Returns the confidence of the intermediary that this payment will succeed
|
|
108
|
+
* Value between 0 and 1, where 0 is not likely and 1 is very likely
|
|
109
|
+
*/
|
|
110
|
+
getConfidence() {
|
|
111
|
+
return this.confidence;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Checks whether a swap is likely to fail, based on the confidence as reported by the LP
|
|
115
|
+
*/
|
|
116
|
+
willLikelyFail() {
|
|
117
|
+
if (this.pr == null || !this.pr.startsWith("ln"))
|
|
118
|
+
return false;
|
|
119
|
+
const parsedRequest = (0, bolt11_1.decode)(this.pr);
|
|
120
|
+
if (parsedRequest.tagsObject.routing_info != null) {
|
|
121
|
+
for (let route of parsedRequest.tagsObject.routing_info) {
|
|
122
|
+
if (SNOWFLAKE_LIST.has(route.pubkey)) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return this.confidence === 0;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Tries to detect if the target lightning invoice is a non-custodial mobile wallet, care must be taken
|
|
131
|
+
* for such a wallet to be online when attempting to make a swap
|
|
132
|
+
*/
|
|
133
|
+
isPayingToNonCustodialWallet() {
|
|
134
|
+
if (this.pr == null || !this.pr.startsWith("ln"))
|
|
135
|
+
return false;
|
|
136
|
+
const parsedRequest = (0, bolt11_1.decode)(this.pr);
|
|
137
|
+
if (parsedRequest.tagsObject.routing_info != null) {
|
|
138
|
+
return parsedRequest.tagsObject.routing_info.length > 0;
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
getIdentifierHash() {
|
|
143
|
+
const idBuffer = this.usesClaimHashAsId
|
|
144
|
+
? buffer_1.Buffer.from(this.getClaimHash(), "hex")
|
|
145
|
+
: this.getPaymentHash();
|
|
146
|
+
if (this.randomNonce == null)
|
|
147
|
+
return idBuffer;
|
|
148
|
+
return buffer_1.Buffer.concat([idBuffer, buffer_1.Buffer.from(this.randomNonce, "hex")]);
|
|
149
|
+
}
|
|
150
|
+
getPaymentHash() {
|
|
151
|
+
if (this.pr == null)
|
|
152
|
+
return null;
|
|
153
|
+
if (this.pr.startsWith("ln")) {
|
|
154
|
+
const parsed = (0, bolt11_1.decode)(this.pr);
|
|
155
|
+
if (parsed.tagsObject.payment_hash == null)
|
|
156
|
+
throw new Error("Swap invoice has no payment hash field!");
|
|
157
|
+
return buffer_1.Buffer.from(parsed.tagsObject.payment_hash, "hex");
|
|
158
|
+
}
|
|
159
|
+
return buffer_1.Buffer.from(this.pr, "hex");
|
|
160
|
+
}
|
|
161
|
+
getLpIdentifier() {
|
|
162
|
+
if (this.pr == null)
|
|
163
|
+
return this.data.getEscrowHash();
|
|
164
|
+
if (this.pr.startsWith("ln")) {
|
|
165
|
+
const parsed = (0, bolt11_1.decode)(this.pr);
|
|
166
|
+
if (parsed.tagsObject.payment_hash == null)
|
|
167
|
+
throw new Error("Swap invoice has no payment hash field!");
|
|
168
|
+
return parsed.tagsObject.payment_hash;
|
|
169
|
+
}
|
|
170
|
+
return this.pr;
|
|
171
|
+
}
|
|
172
|
+
//////////////////////////////
|
|
173
|
+
//// LNURL-pay
|
|
174
|
+
/**
|
|
175
|
+
* Is this an LNURL-pay swap?
|
|
176
|
+
*/
|
|
177
|
+
isLNURL() {
|
|
178
|
+
return this.lnurl != null;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Gets the used LNURL or null if this is not an LNURL-pay swap
|
|
182
|
+
*/
|
|
183
|
+
getLNURL() {
|
|
184
|
+
return this.lnurl ?? null;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Checks whether this LNURL payment contains a success message
|
|
188
|
+
*/
|
|
189
|
+
hasSuccessAction() {
|
|
190
|
+
return this.successAction != null;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Returns the success action after a successful payment, else null
|
|
194
|
+
*/
|
|
195
|
+
getSuccessAction() {
|
|
196
|
+
return LNURL_1.LNURL.decodeSuccessAction(this.successAction, this.secret);
|
|
197
|
+
}
|
|
198
|
+
//////////////////////////////
|
|
199
|
+
//// Storage
|
|
200
|
+
serialize() {
|
|
201
|
+
return {
|
|
202
|
+
...super.serialize(),
|
|
203
|
+
paymentHash: this.getPaymentHash()?.toString("hex"),
|
|
204
|
+
pr: this.pr,
|
|
205
|
+
confidence: this.confidence,
|
|
206
|
+
secret: this.secret,
|
|
207
|
+
lnurl: this.lnurl,
|
|
208
|
+
successAction: this.successAction,
|
|
209
|
+
usesClaimHashAsId: this.usesClaimHashAsId
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
exports.ToBTCLNSwap = ToBTCLNSwap;
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ToBTCLNSwap } from "./ToBTCLNSwap";
|
|
3
|
+
import { IToBTCDefinition, IToBTCWrapper } from "../IToBTCWrapper";
|
|
4
|
+
import { ChainType, SwapCommitState } from "@atomiqlabs/base";
|
|
5
|
+
import { Intermediary } from "../../../../intermediaries/Intermediary";
|
|
6
|
+
import { ISwapWrapperOptions, WrapperCtorTokens } from "../../../ISwapWrapper";
|
|
7
|
+
import { ISwapPrice } from "../../../../prices/abstract/ISwapPrice";
|
|
8
|
+
import { EventEmitter } from "events";
|
|
9
|
+
import { SwapType } from "../../../../enums/SwapType";
|
|
10
|
+
import { UnifiedSwapEventListener } from "../../../../events/UnifiedSwapEventListener";
|
|
11
|
+
import { UnifiedSwapStorage } from "../../../../storage/UnifiedSwapStorage";
|
|
12
|
+
import { ISwap } from "../../../ISwap";
|
|
13
|
+
import { AmountData } from "../../../../types/AmountData";
|
|
14
|
+
import { LNURLPayParamsWithUrl } from "../../../../types/lnurl/LNURLPay";
|
|
15
|
+
import { AllOptional } from "../../../../utils/TypeUtils";
|
|
16
|
+
export type LightningWalletCallback = (valueSats: number, abortSignal?: AbortSignal) => Promise<string>;
|
|
17
|
+
export type InvoiceCreateService = {
|
|
18
|
+
getInvoice: LightningWalletCallback;
|
|
19
|
+
minMsats?: bigint;
|
|
20
|
+
maxMSats?: bigint;
|
|
21
|
+
};
|
|
22
|
+
export declare function isInvoiceCreateService(obj: any): obj is InvoiceCreateService;
|
|
23
|
+
export type ToBTCLNOptions = {
|
|
24
|
+
expirySeconds?: number;
|
|
25
|
+
maxFee?: bigint | Promise<bigint>;
|
|
26
|
+
expiryTimestamp?: bigint;
|
|
27
|
+
maxRoutingPPM?: bigint;
|
|
28
|
+
maxRoutingBaseFee?: bigint;
|
|
29
|
+
};
|
|
30
|
+
export type ToBTCLNWrapperOptions = ISwapWrapperOptions & {
|
|
31
|
+
lightningBaseFee: number;
|
|
32
|
+
lightningFeePPM: number;
|
|
33
|
+
paymentTimeoutSeconds: number;
|
|
34
|
+
};
|
|
35
|
+
export type ToBTCLNDefinition<T extends ChainType> = IToBTCDefinition<T, ToBTCLNWrapper<T>, ToBTCLNSwap<T>>;
|
|
36
|
+
export declare class ToBTCLNWrapper<T extends ChainType> extends IToBTCWrapper<T, ToBTCLNDefinition<T>, ToBTCLNWrapperOptions> {
|
|
37
|
+
readonly TYPE = SwapType.TO_BTCLN;
|
|
38
|
+
readonly swapDeserializer: typeof ToBTCLNSwap;
|
|
39
|
+
constructor(chainIdentifier: string, unifiedStorage: UnifiedSwapStorage<T>, unifiedChainEvents: UnifiedSwapEventListener<T>, chain: T["ChainInterface"], contract: T["Contract"], prices: ISwapPrice, tokens: WrapperCtorTokens, swapDataDeserializer: new (data: any) => T["Data"], options?: AllOptional<ToBTCLNWrapperOptions>, events?: EventEmitter<{
|
|
40
|
+
swapState: [ISwap];
|
|
41
|
+
}>);
|
|
42
|
+
private toRequiredSwapOptions;
|
|
43
|
+
private checkPaymentHashWasPaid;
|
|
44
|
+
/**
|
|
45
|
+
* Calculates maximum lightning network routing fee based on amount
|
|
46
|
+
*
|
|
47
|
+
* @param amount BTC amount of the swap in satoshis
|
|
48
|
+
* @param overrideBaseFee Override wrapper's default base fee
|
|
49
|
+
* @param overrideFeePPM Override wrapper's default PPM
|
|
50
|
+
* @private
|
|
51
|
+
* @returns Maximum lightning routing fee in sats
|
|
52
|
+
*/
|
|
53
|
+
private calculateFeeForAmount;
|
|
54
|
+
/**
|
|
55
|
+
* Verifies returned LP data
|
|
56
|
+
*
|
|
57
|
+
* @param signer
|
|
58
|
+
* @param resp Response as returned by the LP
|
|
59
|
+
* @param parsedPr Parsed bolt11 lightning invoice
|
|
60
|
+
* @param token Smart chain token to be used in the swap
|
|
61
|
+
* @param lp
|
|
62
|
+
* @param options Swap options as passed to the swap create function
|
|
63
|
+
* @param data Parsed swap data returned by the LP
|
|
64
|
+
* @param requiredTotal Required total to be paid on the input (for exactIn swaps)
|
|
65
|
+
* @private
|
|
66
|
+
* @throws {IntermediaryError} In case the response is not valid
|
|
67
|
+
*/
|
|
68
|
+
private verifyReturnedData;
|
|
69
|
+
/**
|
|
70
|
+
* Returns the quote/swap from a given intermediary
|
|
71
|
+
*
|
|
72
|
+
* @param signer Smartchain signer initiating the swap
|
|
73
|
+
* @param amountData
|
|
74
|
+
* @param lp Intermediary
|
|
75
|
+
* @param pr bolt11 lightning network invoice
|
|
76
|
+
* @param parsedPr Parsed bolt11 lightning network invoice
|
|
77
|
+
* @param options Options as passed to the swap create function
|
|
78
|
+
* @param preFetches
|
|
79
|
+
* @param abort Abort signal or controller, if AbortController is passed it is used as-is, when AbortSignal is passed
|
|
80
|
+
* it is extended with extendAbortController and then used
|
|
81
|
+
* @param additionalParams Additional params that should be sent to the LP
|
|
82
|
+
* @private
|
|
83
|
+
*/
|
|
84
|
+
private getIntermediaryQuote;
|
|
85
|
+
/**
|
|
86
|
+
* Returns a newly created swap, paying for 'bolt11PayRequest' - a bitcoin LN invoice
|
|
87
|
+
*
|
|
88
|
+
* @param signer Smartchain signer's address initiating the swap
|
|
89
|
+
* @param bolt11PayRequest BOLT11 payment request (bitcoin lightning invoice) you wish to pay
|
|
90
|
+
* @param amountData Amount of token & amount to swap
|
|
91
|
+
* @param lps LPs (liquidity providers) to get the quotes from
|
|
92
|
+
* @param options Quote options
|
|
93
|
+
* @param additionalParams Additional parameters sent to the LP when creating the swap
|
|
94
|
+
* @param abortSignal Abort signal for aborting the process
|
|
95
|
+
* @param preFetches Existing pre-fetches for the swap (only used internally for LNURL swaps)
|
|
96
|
+
*/
|
|
97
|
+
create(signer: string, bolt11PayRequest: string, amountData: Omit<AmountData, "amount">, lps: Intermediary[], options?: ToBTCLNOptions, additionalParams?: Record<string, any>, abortSignal?: AbortSignal, preFetches?: {
|
|
98
|
+
feeRatePromise: Promise<string | undefined>;
|
|
99
|
+
pricePreFetchPromise: Promise<bigint | undefined>;
|
|
100
|
+
usdPricePrefetchPromise: Promise<number | undefined>;
|
|
101
|
+
signDataPrefetchPromise?: Promise<T["PreFetchVerification"] | undefined>;
|
|
102
|
+
}): Promise<{
|
|
103
|
+
quote: Promise<ToBTCLNSwap<T>>;
|
|
104
|
+
intermediary: Intermediary;
|
|
105
|
+
}[]>;
|
|
106
|
+
/**
|
|
107
|
+
* Parses and fetches lnurl pay params from the specified lnurl
|
|
108
|
+
*
|
|
109
|
+
* @param lnurl LNURL to be parsed and fetched
|
|
110
|
+
* @param abortSignal
|
|
111
|
+
* @private
|
|
112
|
+
* @throws {UserError} if the LNURL is invalid or if it's not a LNURL-pay
|
|
113
|
+
*/
|
|
114
|
+
private getLNURLPay;
|
|
115
|
+
/**
|
|
116
|
+
* Returns the quote/swap from the given LP
|
|
117
|
+
*
|
|
118
|
+
* @param signer Smartchain signer's address initiating the swap
|
|
119
|
+
* @param amountData
|
|
120
|
+
* @param invoiceCreateService Service for creating fixed amount invoices
|
|
121
|
+
* @param lp Intermediary
|
|
122
|
+
* @param dummyPr Dummy minimum value bolt11 lightning invoice returned from the LNURL-pay
|
|
123
|
+
* @param options Options as passed to the swap create function
|
|
124
|
+
* @param preFetches
|
|
125
|
+
* @param abortSignal
|
|
126
|
+
* @param additionalParams Additional params to be sent to the intermediary
|
|
127
|
+
* @private
|
|
128
|
+
*/
|
|
129
|
+
private getIntermediaryQuoteExactIn;
|
|
130
|
+
/**
|
|
131
|
+
* Returns a newly created swap, allowing exactIn swaps with invoice creation service
|
|
132
|
+
*
|
|
133
|
+
* @param signer Smartchain signer's address initiating the swap
|
|
134
|
+
* @param invoiceCreateServicePromise
|
|
135
|
+
* @param amountData Amount of token & amount to swap
|
|
136
|
+
* @param lps LPs (liquidity providers/intermediaries) to get the quotes from
|
|
137
|
+
* @param options Quote options
|
|
138
|
+
* @param additionalParams Additional parameters sent to the intermediary when creating the swap
|
|
139
|
+
* @param abortSignal Abort signal for aborting the process
|
|
140
|
+
*/
|
|
141
|
+
createViaInvoiceCreateService(signer: string, invoiceCreateServicePromise: Promise<InvoiceCreateService>, amountData: AmountData, lps: Intermediary[], options?: ToBTCLNOptions, additionalParams?: Record<string, any>, abortSignal?: AbortSignal): Promise<{
|
|
142
|
+
quote: Promise<ToBTCLNSwap<T>>;
|
|
143
|
+
intermediary: Intermediary;
|
|
144
|
+
}[]>;
|
|
145
|
+
/**
|
|
146
|
+
* Returns a newly created swap, paying for 'lnurl' - a lightning LNURL-pay
|
|
147
|
+
*
|
|
148
|
+
* @param signer Smartchain signer's address initiating the swap
|
|
149
|
+
* @param lnurl LMURL-pay you wish to pay
|
|
150
|
+
* @param amountData Amount of token & amount to swap
|
|
151
|
+
* @param lps LPs (liquidity providers/intermediaries) to get the quotes from
|
|
152
|
+
* @param options Quote options
|
|
153
|
+
* @param additionalParams Additional parameters sent to the intermediary when creating the swap
|
|
154
|
+
* @param abortSignal Abort signal for aborting the process
|
|
155
|
+
*/
|
|
156
|
+
createViaLNURL(signer: string, lnurl: string | LNURLPayParamsWithUrl, amountData: AmountData, lps: Intermediary[], options?: ToBTCLNOptions & {
|
|
157
|
+
comment?: string;
|
|
158
|
+
}, additionalParams?: Record<string, any>, abortSignal?: AbortSignal): Promise<{
|
|
159
|
+
quote: Promise<ToBTCLNSwap<T>>;
|
|
160
|
+
intermediary: Intermediary;
|
|
161
|
+
}[]>;
|
|
162
|
+
recoverFromSwapDataAndState(init: {
|
|
163
|
+
data: T["Data"];
|
|
164
|
+
getInitTxId: () => Promise<string>;
|
|
165
|
+
getTxBlock: () => Promise<{
|
|
166
|
+
blockTime: number;
|
|
167
|
+
blockHeight: number;
|
|
168
|
+
}>;
|
|
169
|
+
}, state: SwapCommitState, lp?: Intermediary): Promise<ToBTCLNSwap<T> | null>;
|
|
170
|
+
}
|