@atomiqlabs/sdk 8.1.8 → 8.3.1
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/dist/bitcoin/wallet/BitcoinWallet.d.ts +41 -5
- package/dist/bitcoin/wallet/BitcoinWallet.js +36 -1
- package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +52 -2
- package/dist/bitcoin/wallet/IBitcoinWallet.js +2 -1
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +42 -7
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +36 -1
- package/dist/enums/FeeType.d.ts +7 -0
- package/dist/enums/FeeType.js +7 -0
- package/dist/enums/SwapAmountType.d.ts +7 -0
- package/dist/enums/SwapAmountType.js +7 -0
- package/dist/enums/SwapDirection.d.ts +7 -0
- package/dist/enums/SwapDirection.js +7 -0
- package/dist/enums/SwapType.d.ts +62 -1
- package/dist/enums/SwapType.js +62 -1
- package/dist/errors/IntermediaryError.d.ts +4 -0
- package/dist/errors/IntermediaryError.js +1 -0
- package/dist/errors/RequestError.d.ts +15 -1
- package/dist/errors/RequestError.js +8 -0
- package/dist/errors/UserError.d.ts +1 -0
- package/dist/errors/UserError.js +1 -0
- package/dist/index.d.ts +4 -5
- package/dist/index.js +3 -4
- package/dist/intermediaries/Intermediary.d.ts +57 -10
- package/dist/intermediaries/Intermediary.js +37 -10
- package/dist/intermediaries/IntermediaryDiscovery.d.ts +55 -22
- package/dist/intermediaries/IntermediaryDiscovery.js +35 -22
- package/dist/prices/RedundantSwapPrice.d.ts +24 -3
- package/dist/prices/RedundantSwapPrice.js +21 -1
- package/dist/prices/SingleSwapPrice.d.ts +9 -6
- package/dist/prices/SingleSwapPrice.js +10 -7
- package/dist/prices/SwapPriceWithChain.d.ts +54 -16
- package/dist/prices/SwapPriceWithChain.js +58 -20
- package/dist/prices/abstract/ISwapPrice.d.ts +94 -45
- package/dist/prices/abstract/ISwapPrice.js +103 -55
- package/dist/prices/providers/BinancePriceProvider.d.ts +7 -0
- package/dist/prices/providers/BinancePriceProvider.js +7 -0
- package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +6 -0
- package/dist/prices/providers/CoinGeckoPriceProvider.js +6 -0
- package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +6 -0
- package/dist/prices/providers/CoinPaprikaPriceProvider.js +6 -0
- package/dist/prices/providers/CustomPriceProvider.d.ts +11 -0
- package/dist/prices/providers/CustomPriceProvider.js +11 -0
- package/dist/prices/providers/KrakenPriceProvider.d.ts +9 -0
- package/dist/prices/providers/KrakenPriceProvider.js +9 -0
- package/dist/prices/providers/OKXPriceProvider.d.ts +6 -0
- package/dist/prices/providers/OKXPriceProvider.js +6 -0
- package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +3 -0
- package/dist/prices/providers/abstract/ExchangePriceProvider.js +3 -0
- package/dist/storage/IUnifiedStorage.d.ts +19 -7
- package/dist/storage/UnifiedSwapStorage.d.ts +33 -3
- package/dist/storage/UnifiedSwapStorage.js +29 -1
- package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +31 -7
- package/dist/storage-browser/IndexedDBUnifiedStorage.js +29 -6
- package/dist/storage-browser/LocalStorageManager.d.ts +25 -1
- package/dist/storage-browser/LocalStorageManager.js +25 -1
- package/dist/swapper/Swapper.d.ts +302 -221
- package/dist/swapper/Swapper.js +376 -344
- package/dist/swapper/SwapperFactory.d.ts +41 -17
- package/dist/swapper/SwapperFactory.js +23 -2
- package/dist/swapper/SwapperUtils.d.ts +75 -28
- package/dist/swapper/SwapperUtils.js +107 -60
- package/dist/swapper/SwapperWithChain.d.ts +286 -91
- package/dist/swapper/SwapperWithChain.js +218 -64
- package/dist/swapper/SwapperWithSigner.d.ts +229 -80
- package/dist/swapper/SwapperWithSigner.js +190 -44
- package/dist/swaps/IAddressSwap.d.ts +10 -1
- package/dist/swaps/IAddressSwap.js +2 -1
- package/dist/swaps/IBTCWalletSwap.d.ts +24 -6
- package/dist/swaps/IBTCWalletSwap.js +2 -1
- package/dist/swaps/IClaimableSwap.d.ts +36 -4
- package/dist/swaps/IClaimableSwap.js +2 -1
- package/dist/swaps/IClaimableSwapWrapper.d.ts +11 -1
- package/dist/swaps/IRefundableSwap.d.ts +29 -3
- package/dist/swaps/IRefundableSwap.js +2 -1
- package/dist/swaps/ISwap.d.ts +159 -21
- package/dist/swaps/ISwap.js +90 -33
- package/dist/swaps/ISwapWithGasDrop.d.ts +6 -0
- package/dist/swaps/ISwapWithGasDrop.js +1 -0
- package/dist/swaps/ISwapWrapper.d.ts +157 -48
- package/dist/swaps/ISwapWrapper.js +130 -72
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +49 -6
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +22 -12
- package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +65 -12
- package/dist/swaps/escrow_swaps/IEscrowSwap.js +38 -19
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +39 -9
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +30 -21
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +31 -15
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +33 -18
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +94 -29
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +90 -27
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +22 -9
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +24 -11
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +275 -58
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +516 -239
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +76 -25
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +131 -49
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +311 -51
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +542 -193
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +87 -26
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +147 -58
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +209 -53
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +449 -242
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +77 -23
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +116 -46
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +197 -56
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +326 -189
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +30 -5
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +44 -19
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +60 -19
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +74 -31
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +76 -50
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +106 -101
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +36 -13
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +65 -19
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +46 -17
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +82 -27
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +328 -92
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +460 -219
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +76 -24
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +244 -124
- package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +146 -18
- package/dist/swaps/trusted/ln/LnForGasSwap.js +173 -43
- package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +29 -10
- package/dist/swaps/trusted/ln/LnForGasWrapper.js +30 -11
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +200 -47
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +230 -78
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +34 -12
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +33 -14
- package/dist/types/AmountData.d.ts +2 -1
- package/dist/types/CustomPriceFunction.d.ts +7 -1
- package/dist/types/SwapExecutionAction.d.ts +74 -4
- package/dist/types/SwapWithSigner.d.ts +4 -1
- package/dist/types/SwapWithSigner.js +5 -2
- package/dist/types/Token.d.ts +11 -5
- package/dist/types/Token.js +6 -3
- package/dist/types/TokenAmount.d.ts +3 -0
- package/dist/types/TokenAmount.js +2 -0
- package/dist/types/fees/Fee.d.ts +2 -1
- package/dist/types/fees/FeeBreakdown.d.ts +2 -1
- package/dist/types/fees/PercentagePPM.d.ts +2 -0
- package/dist/types/fees/PercentagePPM.js +1 -0
- package/dist/types/lnurl/LNURLPay.d.ts +14 -6
- package/dist/types/lnurl/LNURLPay.js +6 -2
- package/dist/types/lnurl/LNURLWithdraw.d.ts +12 -5
- package/dist/types/lnurl/LNURLWithdraw.js +6 -2
- package/dist/types/wallets/LightningInvoiceCreateService.d.ts +20 -0
- package/dist/types/wallets/LightningInvoiceCreateService.js +15 -0
- package/dist/types/wallets/MinimalBitcoinWalletInterface.d.ts +3 -1
- package/dist/types/wallets/MinimalLightningNetworkWalletInterface.d.ts +3 -1
- package/dist/utils/BitcoinUtils.d.ts +1 -0
- package/dist/utils/BitcoinUtils.js +5 -1
- package/dist/utils/SwapUtils.d.ts +56 -1
- package/dist/utils/SwapUtils.js +53 -1
- package/dist/utils/TokenUtils.d.ts +10 -2
- package/dist/utils/TokenUtils.js +12 -4
- package/package.json +3 -3
- package/src/bitcoin/wallet/BitcoinWallet.ts +41 -5
- package/src/bitcoin/wallet/IBitcoinWallet.ts +57 -2
- package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +42 -6
- package/src/enums/FeeType.ts +7 -0
- package/src/enums/SwapAmountType.ts +7 -0
- package/src/enums/SwapDirection.ts +7 -0
- package/src/enums/SwapType.ts +62 -2
- package/src/errors/IntermediaryError.ts +4 -0
- package/src/errors/RequestError.ts +15 -1
- package/src/errors/UserError.ts +1 -0
- package/src/index.ts +6 -5
- package/src/intermediaries/Intermediary.ts +57 -10
- package/src/intermediaries/IntermediaryDiscovery.ts +60 -27
- package/src/prices/RedundantSwapPrice.ts +24 -4
- package/src/prices/SingleSwapPrice.ts +10 -7
- package/src/prices/SwapPriceWithChain.ts +59 -21
- package/src/prices/abstract/ISwapPrice.ts +114 -65
- package/src/prices/providers/BinancePriceProvider.ts +7 -0
- package/src/prices/providers/CoinGeckoPriceProvider.ts +6 -0
- package/src/prices/providers/CoinPaprikaPriceProvider.ts +6 -0
- package/src/prices/providers/CustomPriceProvider.ts +11 -0
- package/src/prices/providers/KrakenPriceProvider.ts +9 -0
- package/src/prices/providers/OKXPriceProvider.ts +6 -0
- package/src/prices/providers/abstract/ExchangePriceProvider.ts +3 -0
- package/src/storage/IUnifiedStorage.ts +19 -7
- package/src/storage/UnifiedSwapStorage.ts +33 -3
- package/src/storage-browser/IndexedDBUnifiedStorage.ts +31 -8
- package/src/storage-browser/LocalStorageManager.ts +25 -1
- package/src/swapper/Swapper.ts +512 -378
- package/src/swapper/SwapperFactory.ts +44 -21
- package/src/swapper/SwapperUtils.ts +107 -60
- package/src/swapper/SwapperWithChain.ts +320 -81
- package/src/swapper/SwapperWithSigner.ts +263 -56
- package/src/swaps/IAddressSwap.ts +11 -1
- package/src/swaps/IBTCWalletSwap.ts +24 -8
- package/src/swaps/IClaimableSwap.ts +39 -4
- package/src/swaps/IClaimableSwapWrapper.ts +11 -2
- package/src/swaps/IRefundableSwap.ts +32 -3
- package/src/swaps/ISwap.ts +221 -82
- package/src/swaps/ISwapWithGasDrop.ts +6 -0
- package/src/swaps/ISwapWrapper.ts +212 -94
- package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +62 -18
- package/src/swaps/escrow_swaps/IEscrowSwap.ts +83 -37
- package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +61 -30
- package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +37 -19
- package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +120 -51
- package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +24 -11
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +559 -256
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +155 -61
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +590 -226
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +177 -74
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +470 -243
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +141 -59
- package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +352 -193
- package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +48 -23
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +86 -39
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +110 -110
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +88 -33
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +101 -31
- package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +534 -263
- package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +289 -148
- package/src/swaps/trusted/ln/LnForGasSwap.ts +184 -45
- package/src/swaps/trusted/ln/LnForGasWrapper.ts +34 -15
- package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +260 -86
- package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +41 -19
- package/src/types/AmountData.ts +2 -1
- package/src/types/CustomPriceFunction.ts +7 -1
- package/src/types/SwapExecutionAction.ts +84 -5
- package/src/types/SwapWithSigner.ts +7 -3
- package/src/types/Token.ts +12 -5
- package/src/types/TokenAmount.ts +3 -0
- package/src/types/fees/Fee.ts +2 -1
- package/src/types/fees/FeeBreakdown.ts +2 -1
- package/src/types/fees/PercentagePPM.ts +2 -0
- package/src/types/lnurl/LNURLPay.ts +14 -6
- package/src/types/lnurl/LNURLWithdraw.ts +12 -5
- package/src/types/wallets/LightningInvoiceCreateService.ts +26 -0
- package/src/types/wallets/MinimalBitcoinWalletInterface.ts +3 -1
- package/src/types/wallets/MinimalLightningNetworkWalletInterface.ts +3 -1
- package/src/utils/BitcoinUtils.ts +5 -0
- package/src/utils/SwapUtils.ts +61 -1
- package/src/utils/TokenUtils.ts +12 -4
- package/dist/bitcoin/BitcoinRpcWithAddressIndex.d.ts +0 -68
- package/dist/bitcoin/BitcoinRpcWithAddressIndex.js +0 -2
- package/dist/bitcoin/LightningNetworkApi.d.ts +0 -12
- package/dist/bitcoin/LightningNetworkApi.js +0 -2
- package/dist/bitcoin/mempool/MempoolApi.d.ts +0 -350
- package/dist/bitcoin/mempool/MempoolApi.js +0 -311
- package/dist/bitcoin/mempool/MempoolBitcoinBlock.d.ts +0 -44
- package/dist/bitcoin/mempool/MempoolBitcoinBlock.js +0 -48
- package/dist/bitcoin/mempool/MempoolBitcoinRpc.d.ts +0 -119
- package/dist/bitcoin/mempool/MempoolBitcoinRpc.js +0 -361
- package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.d.ts +0 -22
- package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.js +0 -105
- package/dist/errors/PaymentAuthError.d.ts +0 -11
- package/dist/errors/PaymentAuthError.js +0 -23
- package/src/errors/PaymentAuthError.ts +0 -26
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
/// <reference types="node" />
|
|
4
|
-
import { ChainType, ClaimEvent, InitializeEvent, LightningNetworkApi, Messenger, RefundEvent } from "@atomiqlabs/base";
|
|
4
|
+
import { ChainType, ClaimEvent, InitializeEvent, LightningNetworkApi, Messenger, RefundEvent, SwapCommitState } from "@atomiqlabs/base";
|
|
5
5
|
import { Intermediary } from "../../../../intermediaries/Intermediary";
|
|
6
6
|
import { Buffer } from "buffer";
|
|
7
7
|
import { SwapType } from "../../../../enums/SwapType";
|
|
@@ -30,11 +30,36 @@ export type FromBTCLNAutoWrapperOptions = ISwapWrapperOptions & {
|
|
|
30
30
|
unsafeSkipLnNodeCheck: boolean;
|
|
31
31
|
};
|
|
32
32
|
export type FromBTCLNAutoDefinition<T extends ChainType> = IFromBTCLNDefinition<T, FromBTCLNAutoWrapper<T>, FromBTCLNAutoSwap<T>>;
|
|
33
|
+
/**
|
|
34
|
+
* New escrow based (HTLC) swaps for Bitcoin Lightning -> Smart chain swaps not requiring manual settlement on
|
|
35
|
+
* the destination by the user, and instead letting the LP initiate the escrow. Permissionless watchtower network
|
|
36
|
+
* handles the claiming of HTLC, with the swap secret broadcasted over Nostr. Also adds a possibility for the user
|
|
37
|
+
* to receive a native token on the destination chain as part of the swap (a "gas drop" feature).
|
|
38
|
+
*
|
|
39
|
+
* @category Swaps
|
|
40
|
+
*/
|
|
33
41
|
export declare class FromBTCLNAutoWrapper<T extends ChainType> extends IFromBTCLNWrapper<T, FromBTCLNAutoDefinition<T>, FromBTCLNAutoWrapperOptions> implements IClaimableSwapWrapper<FromBTCLNAutoSwap<T>> {
|
|
34
|
-
readonly
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
42
|
+
readonly TYPE: SwapType.FROM_BTCLN_AUTO;
|
|
43
|
+
/**
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
protected readonly tickSwapState: FromBTCLNAutoSwapState[];
|
|
47
|
+
/**
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
readonly _pendingSwapStates: FromBTCLNAutoSwapState[];
|
|
51
|
+
/**
|
|
52
|
+
* @internal
|
|
53
|
+
*/
|
|
54
|
+
readonly _claimableSwapStates: FromBTCLNAutoSwapState[];
|
|
55
|
+
/**
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
58
|
+
readonly _swapDeserializer: typeof FromBTCLNAutoSwap;
|
|
59
|
+
/**
|
|
60
|
+
* @internal
|
|
61
|
+
*/
|
|
62
|
+
readonly _messenger: Messenger;
|
|
38
63
|
/**
|
|
39
64
|
* @param chainIdentifier
|
|
40
65
|
* @param unifiedStorage Storage interface for the current environment
|
|
@@ -52,10 +77,20 @@ export declare class FromBTCLNAutoWrapper<T extends ChainType> extends IFromBTCL
|
|
|
52
77
|
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"], lnApi: LightningNetworkApi, messenger: Messenger, options?: AllOptional<FromBTCLNAutoWrapperOptions>, events?: EventEmitter<{
|
|
53
78
|
swapState: [ISwap];
|
|
54
79
|
}>);
|
|
55
|
-
|
|
56
|
-
|
|
80
|
+
/**
|
|
81
|
+
* @inheritDoc
|
|
82
|
+
* @internal
|
|
83
|
+
*/
|
|
57
84
|
protected processEventInitialize(swap: FromBTCLNAutoSwap<T>, event: InitializeEvent<T["Data"]>): Promise<boolean>;
|
|
85
|
+
/**
|
|
86
|
+
* @inheritDoc
|
|
87
|
+
* @internal
|
|
88
|
+
*/
|
|
58
89
|
protected processEventClaim(swap: FromBTCLNAutoSwap<T>, event: ClaimEvent<T["Data"]>): Promise<boolean>;
|
|
90
|
+
/**
|
|
91
|
+
* @inheritDoc
|
|
92
|
+
* @internal
|
|
93
|
+
*/
|
|
59
94
|
protected processEventRefund(swap: FromBTCLNAutoSwap<T>, event: RefundEvent<T["Data"]>): Promise<boolean>;
|
|
60
95
|
/**
|
|
61
96
|
* Pre-fetches claimer (watchtower) bounty data for the swap. Doesn't throw, instead returns null and aborts the
|
|
@@ -65,6 +100,7 @@ export declare class FromBTCLNAutoWrapper<T extends ChainType> extends IFromBTCL
|
|
|
65
100
|
* @param amountData
|
|
66
101
|
* @param options Options as passed to the swap creation function
|
|
67
102
|
* @param abortController
|
|
103
|
+
*
|
|
68
104
|
* @private
|
|
69
105
|
*/
|
|
70
106
|
private preFetchClaimerBounty;
|
|
@@ -78,22 +114,27 @@ export declare class FromBTCLNAutoWrapper<T extends ChainType> extends IFromBTCL
|
|
|
78
114
|
* @param decodedPr Decoded bolt11 lightning network invoice
|
|
79
115
|
* @param paymentHash Expected payment hash of the bolt11 lightning network invoice
|
|
80
116
|
* @param claimerBounty Claimer bounty as request by the user
|
|
81
|
-
*
|
|
117
|
+
*
|
|
82
118
|
* @throws {IntermediaryError} in case the response is invalid
|
|
119
|
+
*
|
|
120
|
+
* @private
|
|
83
121
|
*/
|
|
84
122
|
private verifyReturnedData;
|
|
85
123
|
/**
|
|
86
|
-
* Returns a newly created swap
|
|
124
|
+
* Returns a newly created Lightning -> Smart chain swap using the HTLC based escrow swap protocol,
|
|
125
|
+
* where watchtowers handle the automatic settlement of the swap on the destination chain. Also allows
|
|
126
|
+
* specifying additional "gas drop" native token that the receipient receives on the destination chain
|
|
127
|
+
* in the `options` argument. The user has to pay a bolt11 invoice on the input lightning network side.
|
|
87
128
|
*
|
|
88
|
-
* @param
|
|
89
|
-
* @param amountData
|
|
90
|
-
* @param lps
|
|
91
|
-
* @param options
|
|
92
|
-
* @param additionalParams
|
|
93
|
-
* @param abortSignal
|
|
94
|
-
* @param preFetches
|
|
129
|
+
* @param recipient Recipient's address on the destination chain
|
|
130
|
+
* @param amountData Amount, token and exact input/output data for to swap
|
|
131
|
+
* @param lps An array of intermediaries (LPs) to get the quotes from
|
|
132
|
+
* @param options Optional additional quote options
|
|
133
|
+
* @param additionalParams Optional additional parameters sent to the LP when creating the swap
|
|
134
|
+
* @param abortSignal Abort signal
|
|
135
|
+
* @param preFetches Optional pre-fetches for speeding up the quoting process (mainly used internally)
|
|
95
136
|
*/
|
|
96
|
-
create(
|
|
137
|
+
create(recipient: string, amountData: AmountData, lps: Intermediary[], options?: FromBTCLNAutoOptions, additionalParams?: Record<string, any>, abortSignal?: AbortSignal, preFetches?: {
|
|
97
138
|
pricePrefetchPromise?: Promise<bigint | undefined>;
|
|
98
139
|
usdPricePrefetchPromise?: Promise<number | undefined>;
|
|
99
140
|
gasTokenPricePrefetchPromise?: Promise<bigint | undefined>;
|
|
@@ -103,22 +144,42 @@ export declare class FromBTCLNAutoWrapper<T extends ChainType> extends IFromBTCL
|
|
|
103
144
|
intermediary: Intermediary;
|
|
104
145
|
}[];
|
|
105
146
|
/**
|
|
106
|
-
* Returns a newly created
|
|
147
|
+
* Returns a newly created Lightning -> Smart chain swap using the HTLC based escrow swap protocol,
|
|
148
|
+
* where watchtowers handle the automatic settlement of the swap on the destination chain. Also allows
|
|
149
|
+
* specifying additional "gas drop" native token that the receipient receives on the destination chain
|
|
150
|
+
* in the `options` argument. The swap is created with an LNURL-withdraw link which will be used to pay
|
|
151
|
+
* the generated bolt11 invoice automatically when {@link FromBTCLNSwap.waitForPayment} is called on the
|
|
152
|
+
* swap.
|
|
107
153
|
*
|
|
108
|
-
* @param
|
|
109
|
-
* @param lnurl
|
|
110
|
-
* @param amountData
|
|
111
|
-
* @param lps
|
|
112
|
-
* @param options
|
|
113
|
-
* @param additionalParams
|
|
114
|
-
* @param abortSignal
|
|
154
|
+
* @param recipient Recipient's address on the destination chain
|
|
155
|
+
* @param lnurl LNURL-withdraw link to pull the funds from
|
|
156
|
+
* @param amountData Amount, token and exact input/output data for to swap
|
|
157
|
+
* @param lps An array of intermediaries (LPs) to get the quotes from
|
|
158
|
+
* @param options Optional additional quote options
|
|
159
|
+
* @param additionalParams Optional additional parameters sent to the LP when creating the swap
|
|
160
|
+
* @param abortSignal Abort signal
|
|
115
161
|
*/
|
|
116
|
-
createViaLNURL(
|
|
162
|
+
createViaLNURL(recipient: string, lnurl: string | LNURLWithdrawParamsWithUrl, amountData: AmountData, lps: Intermediary[], options?: FromBTCLNAutoOptions, additionalParams?: Record<string, any>, abortSignal?: AbortSignal): Promise<{
|
|
117
163
|
quote: Promise<FromBTCLNAutoSwap<T>>;
|
|
118
164
|
intermediary: Intermediary;
|
|
119
165
|
}[]>;
|
|
166
|
+
/**
|
|
167
|
+
* @inheritDoc
|
|
168
|
+
* @internal
|
|
169
|
+
*/
|
|
120
170
|
protected _checkPastSwaps(pastSwaps: FromBTCLNAutoSwap<T>[]): Promise<{
|
|
121
171
|
changedSwaps: FromBTCLNAutoSwap<T>[];
|
|
122
172
|
removeSwaps: FromBTCLNAutoSwap<T>[];
|
|
123
173
|
}>;
|
|
174
|
+
/**
|
|
175
|
+
* @inheritDoc
|
|
176
|
+
*/
|
|
177
|
+
recoverFromSwapDataAndState(init: {
|
|
178
|
+
data: T["Data"];
|
|
179
|
+
getInitTxId: () => Promise<string>;
|
|
180
|
+
getTxBlock: () => Promise<{
|
|
181
|
+
blockTime: number;
|
|
182
|
+
blockHeight: number;
|
|
183
|
+
}>;
|
|
184
|
+
}, state: SwapCommitState, lp?: Intermediary): Promise<FromBTCLNAutoSwap<T> | null>;
|
|
124
185
|
}
|
|
@@ -13,6 +13,15 @@ const RequestError_1 = require("../../../../errors/RequestError");
|
|
|
13
13
|
const FromBTCLNAutoSwap_1 = require("./FromBTCLNAutoSwap");
|
|
14
14
|
const IFromBTCLNWrapper_1 = require("../IFromBTCLNWrapper");
|
|
15
15
|
const RetryUtils_1 = require("../../../../utils/RetryUtils");
|
|
16
|
+
const sha2_1 = require("@noble/hashes/sha2");
|
|
17
|
+
/**
|
|
18
|
+
* New escrow based (HTLC) swaps for Bitcoin Lightning -> Smart chain swaps not requiring manual settlement on
|
|
19
|
+
* the destination by the user, and instead letting the LP initiate the escrow. Permissionless watchtower network
|
|
20
|
+
* handles the claiming of HTLC, with the swap secret broadcasted over Nostr. Also adds a possibility for the user
|
|
21
|
+
* to receive a native token on the destination chain as part of the swap (a "gas drop" feature).
|
|
22
|
+
*
|
|
23
|
+
* @category Swaps
|
|
24
|
+
*/
|
|
16
25
|
class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
17
26
|
/**
|
|
18
27
|
* @param chainIdentifier
|
|
@@ -34,27 +43,43 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
|
34
43
|
bitcoinBlocktime: options?.bitcoinBlocktime ?? 10 * 60,
|
|
35
44
|
unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? false
|
|
36
45
|
}, events);
|
|
37
|
-
this.claimableSwapStates = [FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED];
|
|
38
46
|
this.TYPE = SwapType_1.SwapType.FROM_BTCLN_AUTO;
|
|
39
|
-
|
|
40
|
-
|
|
47
|
+
/**
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
this.tickSwapState = [
|
|
41
51
|
FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_CREATED,
|
|
42
52
|
FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.QUOTE_SOFT_EXPIRED,
|
|
43
53
|
FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_PAID,
|
|
44
|
-
FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED
|
|
45
|
-
FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.EXPIRED
|
|
54
|
+
FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED
|
|
46
55
|
];
|
|
47
|
-
|
|
56
|
+
/**
|
|
57
|
+
* @internal
|
|
58
|
+
*/
|
|
59
|
+
this._pendingSwapStates = [
|
|
48
60
|
FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_CREATED,
|
|
49
61
|
FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.QUOTE_SOFT_EXPIRED,
|
|
50
62
|
FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_PAID,
|
|
51
|
-
FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED
|
|
63
|
+
FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED,
|
|
64
|
+
FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.EXPIRED
|
|
52
65
|
];
|
|
53
|
-
|
|
66
|
+
/**
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
this._claimableSwapStates = [FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED];
|
|
70
|
+
/**
|
|
71
|
+
* @internal
|
|
72
|
+
*/
|
|
73
|
+
this._swapDeserializer = FromBTCLNAutoSwap_1.FromBTCLNAutoSwap;
|
|
74
|
+
this._messenger = messenger;
|
|
54
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* @inheritDoc
|
|
78
|
+
* @internal
|
|
79
|
+
*/
|
|
55
80
|
async processEventInitialize(swap, event) {
|
|
56
|
-
if (swap.
|
|
57
|
-
if (swap.
|
|
81
|
+
if (swap._state === FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_PAID || swap._state === FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_CREATED || swap._state === FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.QUOTE_SOFT_EXPIRED) {
|
|
82
|
+
if (swap._data == null) {
|
|
58
83
|
//Obtain data from the initialize event
|
|
59
84
|
const eventData = await event.swapData();
|
|
60
85
|
if (eventData == null) {
|
|
@@ -74,8 +99,8 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
|
74
99
|
this.logger.error("processEventInitialize(" + swap.getId() + "): Error when processing event, escrow hashes don't match!");
|
|
75
100
|
return false;
|
|
76
101
|
}
|
|
77
|
-
swap.
|
|
78
|
-
swap.
|
|
102
|
+
swap._commitTxId = event.meta?.txId;
|
|
103
|
+
swap._state = FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED;
|
|
79
104
|
swap._broadcastSecret().catch(e => {
|
|
80
105
|
this.logger.error("processEventInitialize(" + swap.getId() + "): Error when broadcasting swap secret: ", e);
|
|
81
106
|
});
|
|
@@ -83,18 +108,27 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
|
83
108
|
}
|
|
84
109
|
return false;
|
|
85
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* @inheritDoc
|
|
113
|
+
* @internal
|
|
114
|
+
*/
|
|
86
115
|
processEventClaim(swap, event) {
|
|
87
|
-
if (swap.
|
|
88
|
-
swap.
|
|
89
|
-
swap.
|
|
116
|
+
if (swap._state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.FAILED && swap._state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_CLAIMED) {
|
|
117
|
+
swap._claimTxId = event.meta?.txId;
|
|
118
|
+
swap._state = FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_CLAIMED;
|
|
119
|
+
swap._setSwapSecret(event.result);
|
|
90
120
|
return Promise.resolve(true);
|
|
91
121
|
}
|
|
92
122
|
return Promise.resolve(false);
|
|
93
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* @inheritDoc
|
|
126
|
+
* @internal
|
|
127
|
+
*/
|
|
94
128
|
processEventRefund(swap, event) {
|
|
95
|
-
if (swap.
|
|
96
|
-
swap.
|
|
97
|
-
swap.
|
|
129
|
+
if (swap._state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_CLAIMED && swap._state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.FAILED) {
|
|
130
|
+
swap._refundTxId ??= event.meta?.txId;
|
|
131
|
+
swap._state = FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.FAILED;
|
|
98
132
|
return Promise.resolve(true);
|
|
99
133
|
}
|
|
100
134
|
return Promise.resolve(false);
|
|
@@ -107,15 +141,16 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
|
107
141
|
* @param amountData
|
|
108
142
|
* @param options Options as passed to the swap creation function
|
|
109
143
|
* @param abortController
|
|
144
|
+
*
|
|
110
145
|
* @private
|
|
111
146
|
*/
|
|
112
147
|
async preFetchClaimerBounty(signer, amountData, options, abortController) {
|
|
113
148
|
if (options.unsafeZeroWatchtowerFee)
|
|
114
149
|
return 0n;
|
|
115
150
|
const dummyAmount = BigInt(Math.floor(Math.random() * 0x1000000));
|
|
116
|
-
const dummySwapData = await this.
|
|
151
|
+
const dummySwapData = await this._contract.createSwapData(base_1.ChainSwapType.HTLC, this._chain.randomAddress(), signer, amountData.token, dummyAmount, this._contract.getHashForHtlc((0, Utils_1.randomBytes)(32)).toString("hex"), this.getRandomSequence(), BigInt(Math.floor(Date.now() / 1000)), false, true, BigInt(Math.floor(Math.random() * 0x10000)), BigInt(Math.floor(Math.random() * 0x10000)));
|
|
117
152
|
try {
|
|
118
|
-
const result = await this.
|
|
153
|
+
const result = await this._contract.getClaimFee(this._chain.randomAddress(), dummySwapData);
|
|
119
154
|
return result * BigInt(Math.floor(options.feeSafetyFactor * 1000000)) / 1000000n;
|
|
120
155
|
}
|
|
121
156
|
catch (e) {
|
|
@@ -132,8 +167,10 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
|
132
167
|
* @param decodedPr Decoded bolt11 lightning network invoice
|
|
133
168
|
* @param paymentHash Expected payment hash of the bolt11 lightning network invoice
|
|
134
169
|
* @param claimerBounty Claimer bounty as request by the user
|
|
135
|
-
*
|
|
170
|
+
*
|
|
136
171
|
* @throws {IntermediaryError} in case the response is invalid
|
|
172
|
+
*
|
|
173
|
+
* @private
|
|
137
174
|
*/
|
|
138
175
|
verifyReturnedData(resp, amountData, lp, options, decodedPr, paymentHash, claimerBounty) {
|
|
139
176
|
if (lp.getAddress(this.chainIdentifier) !== resp.intermediaryKey)
|
|
@@ -164,19 +201,22 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
|
164
201
|
}
|
|
165
202
|
}
|
|
166
203
|
/**
|
|
167
|
-
* Returns a newly created swap
|
|
204
|
+
* Returns a newly created Lightning -> Smart chain swap using the HTLC based escrow swap protocol,
|
|
205
|
+
* where watchtowers handle the automatic settlement of the swap on the destination chain. Also allows
|
|
206
|
+
* specifying additional "gas drop" native token that the receipient receives on the destination chain
|
|
207
|
+
* in the `options` argument. The user has to pay a bolt11 invoice on the input lightning network side.
|
|
168
208
|
*
|
|
169
|
-
* @param
|
|
170
|
-
* @param amountData
|
|
171
|
-
* @param lps
|
|
172
|
-
* @param options
|
|
173
|
-
* @param additionalParams
|
|
174
|
-
* @param abortSignal
|
|
175
|
-
* @param preFetches
|
|
209
|
+
* @param recipient Recipient's address on the destination chain
|
|
210
|
+
* @param amountData Amount, token and exact input/output data for to swap
|
|
211
|
+
* @param lps An array of intermediaries (LPs) to get the quotes from
|
|
212
|
+
* @param options Optional additional quote options
|
|
213
|
+
* @param additionalParams Optional additional parameters sent to the LP when creating the swap
|
|
214
|
+
* @param abortSignal Abort signal
|
|
215
|
+
* @param preFetches Optional pre-fetches for speeding up the quoting process (mainly used internally)
|
|
176
216
|
*/
|
|
177
|
-
create(
|
|
217
|
+
create(recipient, amountData, lps, options, additionalParams, abortSignal, preFetches) {
|
|
178
218
|
const _options = {
|
|
179
|
-
unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? this.
|
|
219
|
+
unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? this._options.unsafeSkipLnNodeCheck,
|
|
180
220
|
gasAmount: options?.gasAmount ?? 0n,
|
|
181
221
|
feeSafetyFactor: options?.feeSafetyFactor ?? 1.25,
|
|
182
222
|
unsafeZeroWatchtowerFee: options?.unsafeZeroWatchtowerFee ?? false,
|
|
@@ -187,13 +227,13 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
|
187
227
|
if (_options.descriptionHash != null && _options.descriptionHash.length !== 32)
|
|
188
228
|
throw new UserError_1.UserError("Invalid description hash length");
|
|
189
229
|
const { secret, paymentHash } = this.getSecretAndHash();
|
|
190
|
-
const claimHash = this.
|
|
191
|
-
const nativeTokenAddress = this.
|
|
230
|
+
const claimHash = this._contract.getHashForHtlc(paymentHash);
|
|
231
|
+
const nativeTokenAddress = this._chain.getNativeCurrencyAddress();
|
|
192
232
|
const _abortController = (0, Utils_1.extendAbortController)(abortSignal);
|
|
193
233
|
const _preFetches = {
|
|
194
234
|
pricePrefetchPromise: preFetches?.pricePrefetchPromise ?? this.preFetchPrice(amountData, _abortController.signal),
|
|
195
235
|
usdPricePrefetchPromise: preFetches?.usdPricePrefetchPromise ?? this.preFetchUsdPrice(_abortController.signal),
|
|
196
|
-
claimerBountyPrefetch: preFetches?.claimerBountyPrefetch ?? this.preFetchClaimerBounty(
|
|
236
|
+
claimerBountyPrefetch: preFetches?.claimerBountyPrefetch ?? this.preFetchClaimerBounty(recipient, amountData, _options, _abortController),
|
|
197
237
|
gasTokenPricePrefetchPromise: _options.gasAmount !== 0n || !_options.unsafeZeroWatchtowerFee ?
|
|
198
238
|
(preFetches.gasTokenPricePrefetchPromise ??= this.preFetchPrice({ token: nativeTokenAddress }, _abortController.signal)) :
|
|
199
239
|
undefined
|
|
@@ -210,15 +250,15 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
|
210
250
|
const { lnPublicKey, response } = IntermediaryAPI_1.IntermediaryAPI.initFromBTCLNAuto(this.chainIdentifier, lp.url, {
|
|
211
251
|
paymentHash,
|
|
212
252
|
amount: amountData.amount,
|
|
213
|
-
claimer:
|
|
253
|
+
claimer: recipient,
|
|
214
254
|
token: amountData.token.toString(),
|
|
215
255
|
descriptionHash: _options.descriptionHash,
|
|
216
256
|
exactOut: !amountData.exactIn,
|
|
217
257
|
additionalParams,
|
|
218
|
-
gasToken: this.
|
|
258
|
+
gasToken: this._chain.getNativeCurrencyAddress(),
|
|
219
259
|
gasAmount: _options.gasAmount,
|
|
220
260
|
claimerBounty: (0, Utils_1.throwIfUndefined)(_preFetches.claimerBountyPrefetch)
|
|
221
|
-
}, this.
|
|
261
|
+
}, this._options.postRequestTimeout, abortController.signal, retryCount > 0 ? false : undefined);
|
|
222
262
|
return {
|
|
223
263
|
lnCapacityPromise: _options.unsafeSkipLnNodeCheck ? undefined : this.preFetchLnCapacity(lnPublicKey),
|
|
224
264
|
resp: await response
|
|
@@ -251,7 +291,7 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
|
251
291
|
btcAmountGas: resp.btcAmountGas,
|
|
252
292
|
btcAmountSwap: resp.btcAmountSwap,
|
|
253
293
|
gasPricingInfo,
|
|
254
|
-
initialSwapData: await this.
|
|
294
|
+
initialSwapData: await this._contract.createSwapData(base_1.ChainSwapType.HTLC, lp.getAddress(this.chainIdentifier), recipient, amountData.token, resp.total, claimHash.toString("hex"), this.getRandomSequence(), BigInt(Math.floor(Date.now() / 1000)), false, true, _options.gasAmount + resp.claimerBounty, resp.claimerBounty, nativeTokenAddress),
|
|
255
295
|
pr: resp.pr,
|
|
256
296
|
secret: secret.toString("hex"),
|
|
257
297
|
exactIn: amountData.exactIn ?? true
|
|
@@ -270,19 +310,24 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
|
270
310
|
});
|
|
271
311
|
}
|
|
272
312
|
/**
|
|
273
|
-
* Returns a newly created
|
|
313
|
+
* Returns a newly created Lightning -> Smart chain swap using the HTLC based escrow swap protocol,
|
|
314
|
+
* where watchtowers handle the automatic settlement of the swap on the destination chain. Also allows
|
|
315
|
+
* specifying additional "gas drop" native token that the receipient receives on the destination chain
|
|
316
|
+
* in the `options` argument. The swap is created with an LNURL-withdraw link which will be used to pay
|
|
317
|
+
* the generated bolt11 invoice automatically when {@link FromBTCLNSwap.waitForPayment} is called on the
|
|
318
|
+
* swap.
|
|
274
319
|
*
|
|
275
|
-
* @param
|
|
276
|
-
* @param lnurl
|
|
277
|
-
* @param amountData
|
|
278
|
-
* @param lps
|
|
279
|
-
* @param options
|
|
280
|
-
* @param additionalParams
|
|
281
|
-
* @param abortSignal
|
|
320
|
+
* @param recipient Recipient's address on the destination chain
|
|
321
|
+
* @param lnurl LNURL-withdraw link to pull the funds from
|
|
322
|
+
* @param amountData Amount, token and exact input/output data for to swap
|
|
323
|
+
* @param lps An array of intermediaries (LPs) to get the quotes from
|
|
324
|
+
* @param options Optional additional quote options
|
|
325
|
+
* @param additionalParams Optional additional parameters sent to the LP when creating the swap
|
|
326
|
+
* @param abortSignal Abort signal
|
|
282
327
|
*/
|
|
283
|
-
async createViaLNURL(
|
|
328
|
+
async createViaLNURL(recipient, lnurl, amountData, lps, options, additionalParams, abortSignal) {
|
|
284
329
|
const _options = {
|
|
285
|
-
unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? this.
|
|
330
|
+
unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? this._options.unsafeSkipLnNodeCheck,
|
|
286
331
|
gasAmount: options?.gasAmount ?? 0n,
|
|
287
332
|
feeSafetyFactor: options?.feeSafetyFactor ?? 1.25,
|
|
288
333
|
unsafeZeroWatchtowerFee: options?.unsafeZeroWatchtowerFee ?? false,
|
|
@@ -293,12 +338,12 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
|
293
338
|
pricePrefetchPromise: this.preFetchPrice(amountData, abortController.signal),
|
|
294
339
|
usdPricePrefetchPromise: this.preFetchUsdPrice(abortController.signal),
|
|
295
340
|
gasTokenPricePrefetchPromise: _options.gasAmount !== 0n || !_options.unsafeZeroWatchtowerFee ?
|
|
296
|
-
this.preFetchPrice({ token: this.
|
|
341
|
+
this.preFetchPrice({ token: this._chain.getNativeCurrencyAddress() }, abortController.signal) :
|
|
297
342
|
undefined,
|
|
298
|
-
claimerBountyPrefetch: this.preFetchClaimerBounty(
|
|
343
|
+
claimerBountyPrefetch: this.preFetchClaimerBounty(recipient, amountData, _options, abortController)
|
|
299
344
|
};
|
|
300
345
|
try {
|
|
301
|
-
const exactOutAmountPromise = !amountData.exactIn ? preFetches.pricePrefetchPromise.then(price => this.
|
|
346
|
+
const exactOutAmountPromise = !amountData.exactIn ? preFetches.pricePrefetchPromise.then(price => this._prices.getToBtcSwapAmount(this.chainIdentifier, amountData.amount, amountData.token, abortController.signal, price)).catch(e => {
|
|
302
347
|
abortController.abort(e);
|
|
303
348
|
return undefined;
|
|
304
349
|
}) : undefined;
|
|
@@ -319,12 +364,10 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
|
319
364
|
if ((amount * 105n / 100n) > max)
|
|
320
365
|
throw new UserError_1.UserError("Amount more than LNURL-withdraw maximum");
|
|
321
366
|
}
|
|
322
|
-
return this.create(
|
|
367
|
+
return this.create(recipient, amountData, lps, _options, additionalParams, abortSignal, preFetches).map(data => {
|
|
323
368
|
return {
|
|
324
369
|
quote: data.quote.then(quote => {
|
|
325
|
-
quote.
|
|
326
|
-
quote.lnurlK1 = withdrawRequest.k1;
|
|
327
|
-
quote.lnurlCallback = withdrawRequest.callback;
|
|
370
|
+
quote._setLNURLData(withdrawRequest.url, withdrawRequest.k1, withdrawRequest.callback);
|
|
328
371
|
const amountIn = quote.getInput().rawAmount;
|
|
329
372
|
if (amountIn < min)
|
|
330
373
|
throw new UserError_1.UserError("Amount less than LNURL-withdraw minimum");
|
|
@@ -341,6 +384,10 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
|
341
384
|
throw e;
|
|
342
385
|
}
|
|
343
386
|
}
|
|
387
|
+
/**
|
|
388
|
+
* @inheritDoc
|
|
389
|
+
* @internal
|
|
390
|
+
*/
|
|
344
391
|
async _checkPastSwaps(pastSwaps) {
|
|
345
392
|
const changedSwapSet = new Set();
|
|
346
393
|
const swapExpiredStatus = {};
|
|
@@ -361,13 +408,13 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
|
361
408
|
//Check expiry
|
|
362
409
|
swapExpiredStatus[pastSwap.getId()] = await pastSwap._verifyQuoteDefinitelyExpired();
|
|
363
410
|
}
|
|
364
|
-
if (pastSwap.
|
|
411
|
+
if (pastSwap._shouldFetchOnchainState()) {
|
|
365
412
|
//Add to swaps for which status should be checked
|
|
366
|
-
if (pastSwap.
|
|
413
|
+
if (pastSwap._data != null)
|
|
367
414
|
checkStatusSwaps.push(pastSwap);
|
|
368
415
|
}
|
|
369
416
|
}));
|
|
370
|
-
const swapStatuses = await this.
|
|
417
|
+
const swapStatuses = await this._contract.getCommitStatuses(checkStatusSwaps.map(val => ({ signer: val._getInitiator(), swapData: val._data })));
|
|
371
418
|
for (let pastSwap of checkStatusSwaps) {
|
|
372
419
|
const shouldSave = await pastSwap._sync(false, swapExpiredStatus[pastSwap.getId()], swapStatuses[pastSwap.getEscrowHash()], true);
|
|
373
420
|
if (shouldSave) {
|
|
@@ -389,5 +436,47 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
|
|
|
389
436
|
removeSwaps
|
|
390
437
|
};
|
|
391
438
|
}
|
|
439
|
+
/**
|
|
440
|
+
* @inheritDoc
|
|
441
|
+
*/
|
|
442
|
+
async recoverFromSwapDataAndState(init, state, lp) {
|
|
443
|
+
const data = init.data;
|
|
444
|
+
let paymentHash = data.getHTLCHashHint();
|
|
445
|
+
let secret;
|
|
446
|
+
if (state.type === base_1.SwapCommitStateType.PAID) {
|
|
447
|
+
secret = await state.getClaimResult();
|
|
448
|
+
paymentHash = buffer_1.Buffer.from((0, sha2_1.sha256)(buffer_1.Buffer.from(secret, "hex"))).toString("hex");
|
|
449
|
+
}
|
|
450
|
+
const swapInit = {
|
|
451
|
+
pricingInfo: {
|
|
452
|
+
isValid: true,
|
|
453
|
+
satsBaseFee: 0n,
|
|
454
|
+
swapPriceUSatPerToken: 100000000000000n,
|
|
455
|
+
realPriceUSatPerToken: 100000000000000n,
|
|
456
|
+
differencePPM: 0n,
|
|
457
|
+
feePPM: 0n,
|
|
458
|
+
},
|
|
459
|
+
url: lp?.url,
|
|
460
|
+
expiry: 0,
|
|
461
|
+
swapFee: 0n,
|
|
462
|
+
swapFeeBtc: 0n,
|
|
463
|
+
gasSwapFee: 0n,
|
|
464
|
+
gasSwapFeeBtc: 0n,
|
|
465
|
+
initialSwapData: data,
|
|
466
|
+
data,
|
|
467
|
+
pr: paymentHash ?? undefined,
|
|
468
|
+
secret,
|
|
469
|
+
exactIn: false
|
|
470
|
+
};
|
|
471
|
+
const swap = new FromBTCLNAutoSwap_1.FromBTCLNAutoSwap(this, swapInit);
|
|
472
|
+
swap._commitTxId = await init.getInitTxId();
|
|
473
|
+
const blockData = await init.getTxBlock();
|
|
474
|
+
swap.createdAt = blockData.blockTime * 1000;
|
|
475
|
+
swap._setInitiated();
|
|
476
|
+
swap._state = FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED;
|
|
477
|
+
await swap._sync(false, false, state);
|
|
478
|
+
await swap._save();
|
|
479
|
+
return swap;
|
|
480
|
+
}
|
|
392
481
|
}
|
|
393
482
|
exports.FromBTCLNAutoWrapper = FromBTCLNAutoWrapper;
|