@atomiqlabs/sdk 8.1.8 → 8.3.5
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/coinselect2/utils.d.ts +6 -0
- 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 +8 -1
- package/dist/enums/FeeType.js +8 -1
- 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 +5 -5
- package/dist/index.js +7 -6
- package/dist/intermediaries/Intermediary.d.ts +61 -14
- package/dist/intermediaries/Intermediary.js +38 -11
- package/dist/intermediaries/IntermediaryDiscovery.d.ts +62 -29
- package/dist/intermediaries/IntermediaryDiscovery.js +39 -24
- package/dist/prices/RedundantSwapPrice.d.ts +26 -5
- package/dist/prices/RedundantSwapPrice.js +22 -2
- package/dist/prices/SingleSwapPrice.d.ts +10 -7
- package/dist/prices/SingleSwapPrice.js +11 -8
- package/dist/prices/SwapPriceWithChain.d.ts +56 -19
- package/dist/prices/SwapPriceWithChain.js +62 -25
- package/dist/prices/abstract/IPriceProvider.d.ts +4 -4
- package/dist/prices/abstract/IPriceProvider.js +1 -1
- package/dist/prices/abstract/ISwapPrice.d.ts +95 -46
- package/dist/prices/abstract/ISwapPrice.js +104 -56
- package/dist/prices/providers/BinancePriceProvider.d.ts +8 -1
- package/dist/prices/providers/BinancePriceProvider.js +8 -1
- package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +7 -1
- package/dist/prices/providers/CoinGeckoPriceProvider.js +7 -1
- package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +7 -1
- package/dist/prices/providers/CoinPaprikaPriceProvider.js +7 -1
- package/dist/prices/providers/CustomPriceProvider.d.ts +12 -1
- package/dist/prices/providers/CustomPriceProvider.js +12 -1
- package/dist/prices/providers/KrakenPriceProvider.d.ts +10 -1
- package/dist/prices/providers/KrakenPriceProvider.js +10 -1
- package/dist/prices/providers/OKXPriceProvider.d.ts +7 -1
- package/dist/prices/providers/OKXPriceProvider.js +7 -1
- 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 +380 -226
- package/dist/swapper/Swapper.js +383 -349
- package/dist/swapper/SwapperFactory.d.ts +66 -18
- package/dist/swapper/SwapperFactory.js +24 -3
- 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 +12 -3
- package/dist/swaps/IAddressSwap.js +3 -2
- package/dist/swaps/IBTCWalletSwap.d.ts +26 -8
- package/dist/swaps/IBTCWalletSwap.js +3 -2
- package/dist/swaps/IClaimableSwap.d.ts +38 -6
- package/dist/swaps/IClaimableSwap.js +3 -2
- package/dist/swaps/IClaimableSwapWrapper.d.ts +11 -1
- package/dist/swaps/IRefundableSwap.d.ts +31 -5
- package/dist/swaps/IRefundableSwap.js +3 -2
- package/dist/swaps/ISwap.d.ts +162 -24
- package/dist/swaps/ISwap.js +92 -35
- package/dist/swaps/ISwapWithGasDrop.d.ts +8 -2
- package/dist/swaps/ISwapWithGasDrop.js +2 -1
- package/dist/swaps/ISwapWrapper.d.ts +161 -52
- package/dist/swaps/ISwapWrapper.js +131 -73
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +51 -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 +97 -28
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +91 -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 +278 -60
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +519 -241
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +77 -26
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +132 -50
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +313 -52
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +544 -194
- 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 +222 -55
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +462 -244
- 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 +195 -58
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +324 -191
- 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 +61 -20
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +75 -32
- 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 +37 -14
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +66 -20
- 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 +350 -88
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +482 -215
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +76 -24
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +247 -124
- package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +148 -20
- package/dist/swaps/trusted/ln/LnForGasSwap.js +175 -45
- 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 +202 -49
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +232 -80
- 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 +8 -2
- package/dist/types/PriceInfoType.d.ts +4 -4
- package/dist/types/PriceInfoType.js +3 -3
- package/dist/types/SwapExecutionAction.d.ts +85 -4
- package/dist/types/SwapWithSigner.d.ts +5 -2
- 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 +3 -2
- package/dist/types/fees/FeeBreakdown.d.ts +3 -2
- package/dist/types/fees/PercentagePPM.d.ts +4 -2
- package/dist/types/fees/PercentagePPM.js +2 -1
- package/dist/types/lnurl/LNURLPay.d.ts +20 -12
- package/dist/types/lnurl/LNURLPay.js +8 -4
- package/dist/types/lnurl/LNURLWithdraw.d.ts +17 -10
- package/dist/types/lnurl/LNURLWithdraw.js +8 -4
- package/dist/types/wallets/LightningInvoiceCreateService.d.ts +24 -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 +4 -2
- package/dist/utils/BitcoinUtils.d.ts +1 -0
- package/dist/utils/BitcoinUtils.js +5 -1
- package/dist/utils/SwapUtils.d.ts +58 -1
- package/dist/utils/SwapUtils.js +55 -1
- package/dist/utils/TokenUtils.d.ts +10 -2
- package/dist/utils/TokenUtils.js +12 -4
- package/package.json +3 -3
- package/src/bitcoin/coinselect2/utils.ts +6 -0
- 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 +8 -1
- 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 +12 -5
- package/src/intermediaries/Intermediary.ts +61 -14
- package/src/intermediaries/IntermediaryDiscovery.ts +69 -34
- package/src/prices/RedundantSwapPrice.ts +26 -6
- package/src/prices/SingleSwapPrice.ts +11 -8
- package/src/prices/SwapPriceWithChain.ts +63 -26
- package/src/prices/abstract/IPriceProvider.ts +4 -4
- package/src/prices/abstract/ISwapPrice.ts +115 -66
- package/src/prices/providers/BinancePriceProvider.ts +8 -1
- package/src/prices/providers/CoinGeckoPriceProvider.ts +7 -1
- package/src/prices/providers/CoinPaprikaPriceProvider.ts +7 -1
- package/src/prices/providers/CustomPriceProvider.ts +12 -1
- package/src/prices/providers/KrakenPriceProvider.ts +10 -1
- package/src/prices/providers/OKXPriceProvider.ts +7 -1
- 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 +599 -390
- package/src/swapper/SwapperFactory.ts +73 -24
- 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 +13 -3
- package/src/swaps/IBTCWalletSwap.ts +26 -10
- package/src/swaps/IClaimableSwap.ts +41 -6
- package/src/swaps/IClaimableSwapWrapper.ts +11 -2
- package/src/swaps/IRefundableSwap.ts +34 -5
- package/src/swaps/ISwap.ts +224 -85
- package/src/swaps/ISwapWithGasDrop.ts +8 -2
- package/src/swaps/ISwapWrapper.ts +216 -98
- package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +64 -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 +123 -50
- package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +24 -11
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +562 -258
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +156 -62
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +592 -227
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +177 -74
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +483 -245
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +141 -59
- package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +350 -195
- package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +48 -23
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +87 -40
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +110 -110
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +89 -34
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +101 -31
- package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +556 -259
- package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +292 -148
- package/src/swaps/trusted/ln/LnForGasSwap.ts +186 -47
- package/src/swaps/trusted/ln/LnForGasWrapper.ts +34 -15
- package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +262 -88
- package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +41 -19
- package/src/types/AmountData.ts +2 -1
- package/src/types/CustomPriceFunction.ts +8 -2
- package/src/types/PriceInfoType.ts +4 -4
- package/src/types/SwapExecutionAction.ts +97 -5
- package/src/types/SwapWithSigner.ts +8 -4
- package/src/types/Token.ts +12 -5
- package/src/types/TokenAmount.ts +3 -0
- package/src/types/fees/Fee.ts +3 -2
- package/src/types/fees/FeeBreakdown.ts +3 -2
- package/src/types/fees/PercentagePPM.ts +4 -2
- package/src/types/lnurl/LNURLPay.ts +20 -12
- package/src/types/lnurl/LNURLWithdraw.ts +17 -10
- package/src/types/wallets/LightningInvoiceCreateService.ts +30 -0
- package/src/types/wallets/MinimalBitcoinWalletInterface.ts +3 -1
- package/src/types/wallets/MinimalLightningNetworkWalletInterface.ts +4 -2
- package/src/utils/BitcoinUtils.ts +5 -0
- package/src/utils/SwapUtils.ts +63 -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
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OnchainForGasSwap = exports.isOnchainForGasSwapInit = exports.OnchainForGasSwapState = void 0;
|
|
4
4
|
const SwapType_1 = require("../../../enums/SwapType");
|
|
5
|
-
const PaymentAuthError_1 = require("../../../errors/PaymentAuthError");
|
|
6
5
|
const Utils_1 = require("../../../utils/Utils");
|
|
7
6
|
const BitcoinUtils_1 = require("../../../utils/BitcoinUtils");
|
|
8
7
|
const ISwap_1 = require("../../ISwap");
|
|
@@ -20,15 +19,34 @@ const TimeoutUtils_1 = require("../../../utils/TimeoutUtils");
|
|
|
20
19
|
const BitcoinWalletUtils_1 = require("../../../utils/BitcoinWalletUtils");
|
|
21
20
|
/**
|
|
22
21
|
* State enum for trusted on-chain gas swaps
|
|
23
|
-
*
|
|
22
|
+
*
|
|
23
|
+
* @category Swaps/Trusted Gas Swaps
|
|
24
24
|
*/
|
|
25
25
|
var OnchainForGasSwapState;
|
|
26
26
|
(function (OnchainForGasSwapState) {
|
|
27
|
+
/**
|
|
28
|
+
* The swap quote expired without user sending in the BTC
|
|
29
|
+
*/
|
|
27
30
|
OnchainForGasSwapState[OnchainForGasSwapState["EXPIRED"] = -3] = "EXPIRED";
|
|
31
|
+
/**
|
|
32
|
+
* The swap has failed after the intermediary already received the BTC on the source chain
|
|
33
|
+
*/
|
|
28
34
|
OnchainForGasSwapState[OnchainForGasSwapState["FAILED"] = -2] = "FAILED";
|
|
35
|
+
/**
|
|
36
|
+
* Swap was refunded and BTC returned to the user's refund address
|
|
37
|
+
*/
|
|
29
38
|
OnchainForGasSwapState[OnchainForGasSwapState["REFUNDED"] = -1] = "REFUNDED";
|
|
39
|
+
/**
|
|
40
|
+
* Swap was created
|
|
41
|
+
*/
|
|
30
42
|
OnchainForGasSwapState[OnchainForGasSwapState["PR_CREATED"] = 0] = "PR_CREATED";
|
|
43
|
+
/**
|
|
44
|
+
* The swap is finished after the intermediary sent funds on the destination chain
|
|
45
|
+
*/
|
|
31
46
|
OnchainForGasSwapState[OnchainForGasSwapState["FINISHED"] = 1] = "FINISHED";
|
|
47
|
+
/**
|
|
48
|
+
* Swap is refundable because the intermediary cannot honor the swap request on the destination chain
|
|
49
|
+
*/
|
|
32
50
|
OnchainForGasSwapState[OnchainForGasSwapState["REFUNDABLE"] = 2] = "REFUNDABLE";
|
|
33
51
|
})(OnchainForGasSwapState = exports.OnchainForGasSwapState || (exports.OnchainForGasSwapState = {}));
|
|
34
52
|
function isOnchainForGasSwapInit(obj) {
|
|
@@ -44,15 +62,16 @@ function isOnchainForGasSwapInit(obj) {
|
|
|
44
62
|
}
|
|
45
63
|
exports.isOnchainForGasSwapInit = isOnchainForGasSwapInit;
|
|
46
64
|
/**
|
|
47
|
-
* Trusted
|
|
48
|
-
*
|
|
65
|
+
* Trusted swap for Bitcoin -> Smart chains, to be used for minor amounts to get gas tokens on the
|
|
66
|
+
* destination chain, which is only needed for Solana, which still uses legacy swaps
|
|
67
|
+
*
|
|
68
|
+
* @category Swaps/Trusted Gas Swaps
|
|
49
69
|
*/
|
|
50
70
|
class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
51
71
|
constructor(wrapper, initOrObj) {
|
|
52
72
|
if (isOnchainForGasSwapInit(initOrObj) && initOrObj.url != null)
|
|
53
73
|
initOrObj.url += "/frombtc_trusted";
|
|
54
74
|
super(wrapper, initOrObj);
|
|
55
|
-
this.getSmartChainNetworkFee = null;
|
|
56
75
|
this.TYPE = SwapType_1.SwapType.TRUSTED_FROM_BTC;
|
|
57
76
|
this.wrapper = wrapper;
|
|
58
77
|
if (isOnchainForGasSwapInit(initOrObj)) {
|
|
@@ -64,7 +83,7 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
64
83
|
this.recipient = initOrObj.recipient;
|
|
65
84
|
this.token = initOrObj.token;
|
|
66
85
|
this.refundAddress = initOrObj.refundAddress;
|
|
67
|
-
this.
|
|
86
|
+
this._state = OnchainForGasSwapState.PR_CREATED;
|
|
68
87
|
}
|
|
69
88
|
else {
|
|
70
89
|
this.paymentHash = initOrObj.paymentHash;
|
|
@@ -82,6 +101,10 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
82
101
|
this.logger = (0, Logger_1.getLogger)("OnchainForGas(" + this.getId() + "): ");
|
|
83
102
|
this.tryRecomputeSwapPrice();
|
|
84
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* @inheritDoc
|
|
106
|
+
* @internal
|
|
107
|
+
*/
|
|
85
108
|
upgradeVersion() {
|
|
86
109
|
if (this.version == null) {
|
|
87
110
|
//Noop
|
|
@@ -89,8 +112,8 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
89
112
|
}
|
|
90
113
|
}
|
|
91
114
|
/**
|
|
92
|
-
*
|
|
93
|
-
* @
|
|
115
|
+
* @inheritDoc
|
|
116
|
+
* @internal
|
|
94
117
|
*/
|
|
95
118
|
tryRecomputeSwapPrice() {
|
|
96
119
|
if (this.swapFeeBtc == null && this.swapFee != null) {
|
|
@@ -100,120 +123,203 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
100
123
|
}
|
|
101
124
|
//////////////////////////////
|
|
102
125
|
//// Getters & utils
|
|
126
|
+
/**
|
|
127
|
+
* @inheritDoc
|
|
128
|
+
* @internal
|
|
129
|
+
*/
|
|
103
130
|
_getEscrowHash() {
|
|
104
131
|
return this.paymentHash;
|
|
105
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* @inheritDoc
|
|
135
|
+
*/
|
|
106
136
|
getOutputAddress() {
|
|
107
137
|
return this.recipient;
|
|
108
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* @inheritDoc
|
|
141
|
+
*/
|
|
109
142
|
getInputAddress() {
|
|
110
143
|
//TODO: Fuck this, it's not used anyway
|
|
111
144
|
return null;
|
|
112
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* @inheritDoc
|
|
148
|
+
*/
|
|
113
149
|
getInputTxId() {
|
|
114
150
|
return this.txId ?? null;
|
|
115
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* @inheritDoc
|
|
154
|
+
*/
|
|
116
155
|
getOutputTxId() {
|
|
117
156
|
return this.scTxId ?? null;
|
|
118
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* @inheritDoc
|
|
160
|
+
*/
|
|
119
161
|
getId() {
|
|
120
162
|
return this.paymentHash;
|
|
121
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* @inheritDoc
|
|
166
|
+
*/
|
|
122
167
|
getAddress() {
|
|
123
168
|
return this.address;
|
|
124
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* @inheritDoc
|
|
172
|
+
*/
|
|
125
173
|
getHyperlink() {
|
|
126
174
|
return "bitcoin:" + this.address + "?amount=" + encodeURIComponent((Number(this.inputAmount) / 100000000).toString(10));
|
|
127
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* @inheritDoc
|
|
178
|
+
*/
|
|
128
179
|
requiresAction() {
|
|
129
|
-
return this.
|
|
180
|
+
return this._state === OnchainForGasSwapState.REFUNDABLE;
|
|
130
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* @inheritDoc
|
|
184
|
+
*/
|
|
131
185
|
isFinished() {
|
|
132
|
-
return this.
|
|
186
|
+
return this._state === OnchainForGasSwapState.FINISHED || this._state === OnchainForGasSwapState.FAILED || this._state === OnchainForGasSwapState.EXPIRED || this._state === OnchainForGasSwapState.REFUNDED;
|
|
133
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* @inheritDoc
|
|
190
|
+
*/
|
|
134
191
|
isQuoteExpired() {
|
|
135
|
-
return this.
|
|
192
|
+
return this._state === OnchainForGasSwapState.EXPIRED;
|
|
136
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* @inheritDoc
|
|
196
|
+
*/
|
|
137
197
|
isQuoteSoftExpired() {
|
|
138
198
|
return this.expiry < Date.now();
|
|
139
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* @inheritDoc
|
|
202
|
+
*/
|
|
140
203
|
isFailed() {
|
|
141
|
-
return this.
|
|
204
|
+
return this._state === OnchainForGasSwapState.FAILED;
|
|
142
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* @inheritDoc
|
|
208
|
+
*/
|
|
143
209
|
isSuccessful() {
|
|
144
|
-
return this.
|
|
210
|
+
return this._state === OnchainForGasSwapState.FINISHED;
|
|
145
211
|
}
|
|
146
|
-
|
|
212
|
+
/**
|
|
213
|
+
* @inheritDoc
|
|
214
|
+
* @internal
|
|
215
|
+
*/
|
|
216
|
+
_verifyQuoteDefinitelyExpired() {
|
|
217
|
+
return Promise.resolve(this.expiry < Date.now());
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* @inheritDoc
|
|
221
|
+
* @internal
|
|
222
|
+
*/
|
|
223
|
+
_verifyQuoteValid() {
|
|
147
224
|
return Promise.resolve(this.expiry > Date.now());
|
|
148
225
|
}
|
|
149
226
|
//////////////////////////////
|
|
150
227
|
//// Amounts & fees
|
|
228
|
+
/**
|
|
229
|
+
* Returns an output amount in base units without a swap fee included, hence this value
|
|
230
|
+
* is larger than the actual output amount
|
|
231
|
+
*
|
|
232
|
+
* @internal
|
|
233
|
+
*/
|
|
151
234
|
getOutAmountWithoutFee() {
|
|
152
235
|
return this.outputAmount + (this.swapFee ?? 0n);
|
|
153
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* @inheritDoc
|
|
239
|
+
*/
|
|
154
240
|
getOutputToken() {
|
|
155
|
-
return this.wrapper.
|
|
241
|
+
return this.wrapper._tokens[this.wrapper._chain.getNativeCurrencyAddress()];
|
|
156
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* @inheritDoc
|
|
245
|
+
*/
|
|
157
246
|
getOutput() {
|
|
158
|
-
return (0, TokenAmount_1.toTokenAmount)(this.outputAmount, this.wrapper.
|
|
247
|
+
return (0, TokenAmount_1.toTokenAmount)(this.outputAmount, this.wrapper._tokens[this.wrapper._chain.getNativeCurrencyAddress()], this.wrapper._prices, this.pricingInfo);
|
|
159
248
|
}
|
|
249
|
+
/**
|
|
250
|
+
* @inheritDoc
|
|
251
|
+
*/
|
|
160
252
|
getInputToken() {
|
|
161
253
|
return Token_1.BitcoinTokens.BTC;
|
|
162
254
|
}
|
|
255
|
+
/**
|
|
256
|
+
* @inheritDoc
|
|
257
|
+
*/
|
|
163
258
|
getInput() {
|
|
164
|
-
return (0, TokenAmount_1.toTokenAmount)(this.inputAmount, Token_1.BitcoinTokens.BTC, this.wrapper.
|
|
259
|
+
return (0, TokenAmount_1.toTokenAmount)(this.inputAmount, Token_1.BitcoinTokens.BTC, this.wrapper._prices, this.pricingInfo);
|
|
165
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
* @inheritDoc
|
|
263
|
+
*/
|
|
166
264
|
getInputWithoutFee() {
|
|
167
|
-
return (0, TokenAmount_1.toTokenAmount)(this.inputAmount - (this.swapFeeBtc ?? 0n), Token_1.BitcoinTokens.BTC, this.wrapper.
|
|
265
|
+
return (0, TokenAmount_1.toTokenAmount)(this.inputAmount - (this.swapFeeBtc ?? 0n), Token_1.BitcoinTokens.BTC, this.wrapper._prices, this.pricingInfo);
|
|
168
266
|
}
|
|
267
|
+
/**
|
|
268
|
+
* Returns the swap fee charged by the intermediary (LP) on this swap
|
|
269
|
+
*
|
|
270
|
+
* @internal
|
|
271
|
+
*/
|
|
169
272
|
getSwapFee() {
|
|
170
273
|
if (this.pricingInfo == null)
|
|
171
274
|
throw new Error("No pricing info known!");
|
|
172
275
|
const feeWithoutBaseFee = this.swapFeeBtc == null ? 0n : this.swapFeeBtc - this.pricingInfo.satsBaseFee;
|
|
173
276
|
const swapFeePPM = feeWithoutBaseFee * 1000000n / this.getInputWithoutFee().rawAmount;
|
|
174
|
-
const amountInSrcToken = (0, TokenAmount_1.toTokenAmount)(this.swapFeeBtc ?? 0n, Token_1.BitcoinTokens.BTC, this.wrapper.
|
|
277
|
+
const amountInSrcToken = (0, TokenAmount_1.toTokenAmount)(this.swapFeeBtc ?? 0n, Token_1.BitcoinTokens.BTC, this.wrapper._prices, this.pricingInfo);
|
|
175
278
|
return {
|
|
176
279
|
amountInSrcToken,
|
|
177
|
-
amountInDstToken: (0, TokenAmount_1.toTokenAmount)(this.swapFee ?? 0n, this.wrapper.
|
|
280
|
+
amountInDstToken: (0, TokenAmount_1.toTokenAmount)(this.swapFee ?? 0n, this.wrapper._tokens[this.wrapper._chain.getNativeCurrencyAddress()], this.wrapper._prices, this.pricingInfo),
|
|
178
281
|
currentUsdValue: amountInSrcToken.currentUsdValue,
|
|
179
282
|
usdValue: amountInSrcToken.usdValue,
|
|
180
283
|
pastUsdValue: amountInSrcToken.pastUsdValue,
|
|
181
284
|
composition: {
|
|
182
|
-
base: (0, TokenAmount_1.toTokenAmount)(this.pricingInfo.satsBaseFee, Token_1.BitcoinTokens.BTC, this.wrapper.
|
|
285
|
+
base: (0, TokenAmount_1.toTokenAmount)(this.pricingInfo.satsBaseFee, Token_1.BitcoinTokens.BTC, this.wrapper._prices, this.pricingInfo),
|
|
183
286
|
percentage: (0, PercentagePPM_1.ppmToPercentage)(swapFeePPM)
|
|
184
287
|
}
|
|
185
288
|
};
|
|
186
289
|
}
|
|
290
|
+
/**
|
|
291
|
+
* @inheritDoc
|
|
292
|
+
*/
|
|
187
293
|
getFee() {
|
|
188
294
|
return this.getSwapFee();
|
|
189
295
|
}
|
|
296
|
+
/**
|
|
297
|
+
* @inheritDoc
|
|
298
|
+
*/
|
|
190
299
|
getFeeBreakdown() {
|
|
191
300
|
return [{
|
|
192
301
|
type: FeeType_1.FeeType.SWAP,
|
|
193
302
|
fee: this.getSwapFee()
|
|
194
303
|
}];
|
|
195
304
|
}
|
|
305
|
+
/**
|
|
306
|
+
* @inheritDoc
|
|
307
|
+
*/
|
|
196
308
|
getRequiredConfirmationsCount() {
|
|
197
309
|
return 1;
|
|
198
310
|
}
|
|
199
311
|
/**
|
|
200
|
-
*
|
|
201
|
-
* also returns inputs indices that need to be signed by the wallet before submitting the PSBT back to the SDK with
|
|
202
|
-
* `swap.submitPsbt()`
|
|
203
|
-
*
|
|
204
|
-
* @param _bitcoinWallet Sender's bitcoin wallet
|
|
205
|
-
* @param feeRate Optional fee rate for the transaction, needs to be at least as big as {minimumBtcFeeRate} field
|
|
206
|
-
* @param additionalOutputs additional outputs to add to the PSBT - can be used to collect fees from users
|
|
312
|
+
* @inheritDoc
|
|
207
313
|
*/
|
|
208
314
|
async getFundedPsbt(_bitcoinWallet, feeRate, additionalOutputs) {
|
|
209
|
-
if (this.
|
|
315
|
+
if (this._state !== OnchainForGasSwapState.PR_CREATED)
|
|
210
316
|
throw new Error("Swap already paid for!");
|
|
211
317
|
let bitcoinWallet;
|
|
212
318
|
if ((0, IBitcoinWallet_1.isIBitcoinWallet)(_bitcoinWallet)) {
|
|
213
319
|
bitcoinWallet = _bitcoinWallet;
|
|
214
320
|
}
|
|
215
321
|
else {
|
|
216
|
-
bitcoinWallet = new SingleAddressBitcoinWallet_1.SingleAddressBitcoinWallet(this.wrapper.
|
|
322
|
+
bitcoinWallet = new SingleAddressBitcoinWallet_1.SingleAddressBitcoinWallet(this.wrapper._btcRpc, this.wrapper._options.bitcoinNetwork, _bitcoinWallet);
|
|
217
323
|
}
|
|
218
324
|
//TODO: Maybe re-introduce fee rate check here if passed from the user
|
|
219
325
|
if (feeRate == null) {
|
|
@@ -225,13 +331,13 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
225
331
|
});
|
|
226
332
|
basePsbt.addOutput({
|
|
227
333
|
amount: this.outputAmount,
|
|
228
|
-
script: (0, BitcoinUtils_1.toOutputScript)(this.wrapper.
|
|
334
|
+
script: (0, BitcoinUtils_1.toOutputScript)(this.wrapper._options.bitcoinNetwork, this.address)
|
|
229
335
|
});
|
|
230
336
|
if (additionalOutputs != null)
|
|
231
337
|
additionalOutputs.forEach(output => {
|
|
232
338
|
basePsbt.addOutput({
|
|
233
339
|
amount: output.amount,
|
|
234
|
-
script: output.outputScript ?? (0, BitcoinUtils_1.toOutputScript)(this.wrapper.
|
|
340
|
+
script: output.outputScript ?? (0, BitcoinUtils_1.toOutputScript)(this.wrapper._options.bitcoinNetwork, output.address)
|
|
235
341
|
});
|
|
236
342
|
});
|
|
237
343
|
const psbt = await bitcoinWallet.fundPsbt(basePsbt, feeRate);
|
|
@@ -249,13 +355,11 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
249
355
|
};
|
|
250
356
|
}
|
|
251
357
|
/**
|
|
252
|
-
*
|
|
253
|
-
*
|
|
254
|
-
* @param _psbt A psbt - either a Transaction object or a hex or base64 encoded PSBT string
|
|
358
|
+
* @inheritDoc
|
|
255
359
|
*/
|
|
256
360
|
async submitPsbt(_psbt) {
|
|
257
361
|
const psbt = (0, BitcoinUtils_1.parsePsbtTransaction)(_psbt);
|
|
258
|
-
if (this.
|
|
362
|
+
if (this._state !== OnchainForGasSwapState.PR_CREATED)
|
|
259
363
|
throw new Error("Swap already paid for!");
|
|
260
364
|
//Ensure not expired
|
|
261
365
|
if (this.expiry < Date.now()) {
|
|
@@ -264,22 +368,28 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
264
368
|
const output0 = psbt.getOutput(0);
|
|
265
369
|
if (output0.amount !== this.outputAmount)
|
|
266
370
|
throw new Error("PSBT output amount invalid, expected: " + this.outputAmount + " got: " + output0.amount);
|
|
267
|
-
const expectedOutputScript = (0, BitcoinUtils_1.toOutputScript)(this.wrapper.
|
|
371
|
+
const expectedOutputScript = (0, BitcoinUtils_1.toOutputScript)(this.wrapper._options.bitcoinNetwork, this.address);
|
|
268
372
|
if (output0.script == null || !expectedOutputScript.equals(output0.script))
|
|
269
373
|
throw new Error("PSBT output script invalid!");
|
|
270
374
|
if (!psbt.isFinal)
|
|
271
375
|
psbt.finalize();
|
|
272
|
-
return await this.wrapper.
|
|
376
|
+
return await this.wrapper._btcRpc.sendRawTransaction(buffer_1.Buffer.from(psbt.toBytes(true, true)).toString("hex"));
|
|
273
377
|
}
|
|
378
|
+
/**
|
|
379
|
+
* @inheritDoc
|
|
380
|
+
*/
|
|
274
381
|
async estimateBitcoinFee(_bitcoinWallet, feeRate) {
|
|
275
|
-
const bitcoinWallet = (0, BitcoinWalletUtils_1.toBitcoinWallet)(_bitcoinWallet, this.wrapper.
|
|
382
|
+
const bitcoinWallet = (0, BitcoinWalletUtils_1.toBitcoinWallet)(_bitcoinWallet, this.wrapper._btcRpc, this.wrapper._options.bitcoinNetwork);
|
|
276
383
|
const txFee = await bitcoinWallet.getTransactionFee(this.address, this.inputAmount, feeRate);
|
|
277
384
|
if (txFee == null)
|
|
278
385
|
return null;
|
|
279
|
-
return (0, TokenAmount_1.toTokenAmount)(BigInt(txFee), Token_1.BitcoinTokens.BTC, this.wrapper.
|
|
386
|
+
return (0, TokenAmount_1.toTokenAmount)(BigInt(txFee), Token_1.BitcoinTokens.BTC, this.wrapper._prices, this.pricingInfo);
|
|
280
387
|
}
|
|
388
|
+
/**
|
|
389
|
+
* @inheritDoc
|
|
390
|
+
*/
|
|
281
391
|
async sendBitcoinTransaction(wallet, feeRate) {
|
|
282
|
-
if (this.
|
|
392
|
+
if (this._state !== OnchainForGasSwapState.PR_CREATED)
|
|
283
393
|
throw new Error("Swap already paid for!");
|
|
284
394
|
//Ensure not expired
|
|
285
395
|
if (this.expiry < Date.now()) {
|
|
@@ -296,9 +406,15 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
296
406
|
return await this.submitPsbt(signedPsbt);
|
|
297
407
|
}
|
|
298
408
|
}
|
|
409
|
+
/**
|
|
410
|
+
* @inheritDoc
|
|
411
|
+
*
|
|
412
|
+
* @param options.bitcoinWallet Optional bitcoin wallet address specification to return a funded PSBT,
|
|
413
|
+
* if not provided an address is returned instead.
|
|
414
|
+
*/
|
|
299
415
|
async txsExecute(options) {
|
|
300
|
-
if (this.
|
|
301
|
-
if (!await this.
|
|
416
|
+
if (this._state === OnchainForGasSwapState.PR_CREATED) {
|
|
417
|
+
if (!await this._verifyQuoteValid())
|
|
302
418
|
throw new Error("Quote already expired or close to expiry!");
|
|
303
419
|
return [
|
|
304
420
|
{
|
|
@@ -323,16 +439,24 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
323
439
|
}
|
|
324
440
|
//////////////////////////////
|
|
325
441
|
//// Payment
|
|
442
|
+
/**
|
|
443
|
+
* Queries the intermediary (LP) node for the state of the swap
|
|
444
|
+
*
|
|
445
|
+
* @param save Whether the save the result or not
|
|
446
|
+
*
|
|
447
|
+
* @returns Whether the swap was successful as `boolean` or `null` if the swap is still pending
|
|
448
|
+
* @internal
|
|
449
|
+
*/
|
|
326
450
|
async checkAddress(save = true) {
|
|
327
|
-
if (this.
|
|
328
|
-
this.
|
|
329
|
-
this.
|
|
451
|
+
if (this._state === OnchainForGasSwapState.FAILED ||
|
|
452
|
+
this._state === OnchainForGasSwapState.EXPIRED ||
|
|
453
|
+
this._state === OnchainForGasSwapState.REFUNDED)
|
|
330
454
|
return false;
|
|
331
|
-
if (this.
|
|
455
|
+
if (this._state === OnchainForGasSwapState.FINISHED)
|
|
332
456
|
return false;
|
|
333
457
|
if (this.url == null)
|
|
334
458
|
return false;
|
|
335
|
-
const response = await TrustedIntermediaryAPI_1.TrustedIntermediaryAPI.getAddressStatus(this.url, this.paymentHash, this.sequence, this.wrapper.
|
|
459
|
+
const response = await TrustedIntermediaryAPI_1.TrustedIntermediaryAPI.getAddressStatus(this.url, this.paymentHash, this.sequence, this.wrapper._options.getRequestTimeout);
|
|
336
460
|
switch (response.code) {
|
|
337
461
|
case TrustedIntermediaryAPI_1.AddressStatusResponseCodes.AWAIT_PAYMENT:
|
|
338
462
|
if (this.txId != null) {
|
|
@@ -366,9 +490,9 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
366
490
|
}
|
|
367
491
|
return false;
|
|
368
492
|
case TrustedIntermediaryAPI_1.AddressStatusResponseCodes.PAID:
|
|
369
|
-
const txStatus = await this.wrapper.
|
|
493
|
+
const txStatus = await this.wrapper._chain.getTxIdStatus(response.data.txId);
|
|
370
494
|
if (txStatus === "success") {
|
|
371
|
-
this.
|
|
495
|
+
this._state = OnchainForGasSwapState.FINISHED;
|
|
372
496
|
this.scTxId = response.data.txId;
|
|
373
497
|
if (save)
|
|
374
498
|
await this._saveAndEmit();
|
|
@@ -376,30 +500,36 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
376
500
|
}
|
|
377
501
|
return false;
|
|
378
502
|
case TrustedIntermediaryAPI_1.AddressStatusResponseCodes.EXPIRED:
|
|
379
|
-
this.
|
|
503
|
+
this._state = OnchainForGasSwapState.EXPIRED;
|
|
380
504
|
if (save)
|
|
381
505
|
await this._saveAndEmit();
|
|
382
506
|
return true;
|
|
383
507
|
case TrustedIntermediaryAPI_1.AddressStatusResponseCodes.REFUNDABLE:
|
|
384
|
-
if (this.
|
|
508
|
+
if (this._state === OnchainForGasSwapState.REFUNDABLE)
|
|
385
509
|
return null;
|
|
386
|
-
this.
|
|
510
|
+
this._state = OnchainForGasSwapState.REFUNDABLE;
|
|
387
511
|
if (save)
|
|
388
512
|
await this._saveAndEmit();
|
|
389
513
|
return true;
|
|
390
514
|
case TrustedIntermediaryAPI_1.AddressStatusResponseCodes.REFUNDED:
|
|
391
|
-
this.
|
|
515
|
+
this._state = OnchainForGasSwapState.REFUNDED;
|
|
392
516
|
this.refundTxId = response.data.txId;
|
|
393
517
|
if (save)
|
|
394
518
|
await this._saveAndEmit();
|
|
395
519
|
return true;
|
|
396
520
|
default:
|
|
397
|
-
this.
|
|
521
|
+
this._state = OnchainForGasSwapState.FAILED;
|
|
398
522
|
if (save)
|
|
399
523
|
await this._saveAndEmit();
|
|
400
524
|
return true;
|
|
401
525
|
}
|
|
402
526
|
}
|
|
527
|
+
/**
|
|
528
|
+
* Sets the bitcoin address used for possible refunds in case something goes wrong with the swap
|
|
529
|
+
*
|
|
530
|
+
* @param refundAddress Bitcoin address to receive the refund to
|
|
531
|
+
* @internal
|
|
532
|
+
*/
|
|
403
533
|
async setRefundAddress(refundAddress) {
|
|
404
534
|
if (this.refundAddress != null) {
|
|
405
535
|
if (this.refundAddress !== refundAddress)
|
|
@@ -408,31 +538,24 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
408
538
|
}
|
|
409
539
|
if (this.url == null)
|
|
410
540
|
throw new Error("LP URL not known, cannot set refund address!");
|
|
411
|
-
await TrustedIntermediaryAPI_1.TrustedIntermediaryAPI.setRefundAddress(this.url, this.paymentHash, this.sequence, refundAddress, this.wrapper.
|
|
541
|
+
await TrustedIntermediaryAPI_1.TrustedIntermediaryAPI.setRefundAddress(this.url, this.paymentHash, this.sequence, refundAddress, this.wrapper._options.getRequestTimeout);
|
|
412
542
|
this.refundAddress = refundAddress;
|
|
413
543
|
}
|
|
414
544
|
/**
|
|
415
|
-
*
|
|
416
|
-
* rejecting in case of failure
|
|
417
|
-
*
|
|
418
|
-
* @param abortSignal Abort signal
|
|
419
|
-
* @param checkIntervalSeconds How often to poll the intermediary for answer
|
|
420
|
-
* @param updateCallback Callback called when txId is found, and also called with subsequent confirmations
|
|
421
|
-
* @throws {PaymentAuthError} If swap expired or failed
|
|
422
|
-
* @throws {Error} When in invalid state (not PR_CREATED)
|
|
545
|
+
* @inheritDoc
|
|
423
546
|
*/
|
|
424
547
|
async waitForBitcoinTransaction(updateCallback, checkIntervalSeconds = 5, abortSignal) {
|
|
425
|
-
if (this.
|
|
548
|
+
if (this._state !== OnchainForGasSwapState.PR_CREATED)
|
|
426
549
|
throw new Error("Must be in PR_CREATED state!");
|
|
427
550
|
if (!this.initiated) {
|
|
428
551
|
this.initiated = true;
|
|
429
552
|
await this._saveAndEmit();
|
|
430
553
|
}
|
|
431
554
|
while (!abortSignal?.aborted &&
|
|
432
|
-
this.
|
|
555
|
+
this._state === OnchainForGasSwapState.PR_CREATED) {
|
|
433
556
|
await this.checkAddress(true);
|
|
434
557
|
if (this.txId != null && updateCallback != null) {
|
|
435
|
-
const res = await this.wrapper.
|
|
558
|
+
const res = await this.wrapper._btcRpc.getTransaction(this.txId);
|
|
436
559
|
if (res == null) {
|
|
437
560
|
updateCallback();
|
|
438
561
|
}
|
|
@@ -440,39 +563,53 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
440
563
|
updateCallback(res.txid, res.confirmations, 1, 0);
|
|
441
564
|
}
|
|
442
565
|
else {
|
|
443
|
-
const delay = await this.wrapper.
|
|
566
|
+
const delay = await this.wrapper._btcRpc.getConfirmationDelay(res, 1);
|
|
444
567
|
updateCallback(res.txid, 0, 1, delay ?? undefined);
|
|
445
568
|
}
|
|
446
569
|
}
|
|
447
|
-
if (this.
|
|
570
|
+
if (this._state === OnchainForGasSwapState.PR_CREATED)
|
|
448
571
|
await (0, TimeoutUtils_1.timeoutPromise)(checkIntervalSeconds * 1000, abortSignal);
|
|
449
572
|
}
|
|
450
|
-
if (this.
|
|
451
|
-
this.
|
|
573
|
+
if (this._state === OnchainForGasSwapState.REFUNDABLE ||
|
|
574
|
+
this._state === OnchainForGasSwapState.REFUNDED)
|
|
452
575
|
return this.txId;
|
|
453
576
|
if (this.isQuoteExpired())
|
|
454
|
-
throw new
|
|
577
|
+
throw new Error("Swap expired");
|
|
455
578
|
if (this.isFailed())
|
|
456
|
-
throw new
|
|
579
|
+
throw new Error("Swap failed");
|
|
457
580
|
return this.txId;
|
|
458
581
|
}
|
|
582
|
+
/**
|
|
583
|
+
* Waits till the LP processes a refund for a failed swap. The swap must be in
|
|
584
|
+
* {@link OnchainForGasSwapState.REFUNDABLE} state
|
|
585
|
+
*
|
|
586
|
+
* @param checkIntervalSeconds How often to check (default 5 seconds)
|
|
587
|
+
* @param abortSignal Abort signal
|
|
588
|
+
*/
|
|
459
589
|
async waitTillRefunded(checkIntervalSeconds, abortSignal) {
|
|
460
590
|
checkIntervalSeconds ??= 5;
|
|
461
|
-
if (this.
|
|
591
|
+
if (this._state === OnchainForGasSwapState.REFUNDED)
|
|
462
592
|
return;
|
|
463
|
-
if (this.
|
|
593
|
+
if (this._state !== OnchainForGasSwapState.REFUNDABLE)
|
|
464
594
|
throw new Error("Must be in REFUNDABLE state!");
|
|
465
595
|
while (!abortSignal?.aborted &&
|
|
466
|
-
this.
|
|
596
|
+
this._state === OnchainForGasSwapState.REFUNDABLE) {
|
|
467
597
|
await this.checkAddress(true);
|
|
468
|
-
if (this.
|
|
598
|
+
if (this._state === OnchainForGasSwapState.REFUNDABLE)
|
|
469
599
|
await (0, TimeoutUtils_1.timeoutPromise)(checkIntervalSeconds * 1000, abortSignal);
|
|
470
600
|
}
|
|
471
601
|
if (this.isQuoteExpired())
|
|
472
|
-
throw new
|
|
602
|
+
throw new Error("Swap expired");
|
|
473
603
|
if (this.isFailed())
|
|
474
|
-
throw new
|
|
604
|
+
throw new Error("Swap failed");
|
|
475
605
|
}
|
|
606
|
+
/**
|
|
607
|
+
* Requests a refund after the swap failed, this also waits till the refund is actually sent by the
|
|
608
|
+
* intermediary (LP). The swap must be in {@link OnchainForGasSwapState.REFUNDABLE} state
|
|
609
|
+
*
|
|
610
|
+
* @param refundAddress Bitcoin address to receive the refund to
|
|
611
|
+
* @param abortSignal Abort signal
|
|
612
|
+
*/
|
|
476
613
|
async requestRefund(refundAddress, abortSignal) {
|
|
477
614
|
if (refundAddress != null)
|
|
478
615
|
await this.setRefundAddress(refundAddress);
|
|
@@ -480,6 +617,9 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
480
617
|
}
|
|
481
618
|
//////////////////////////////
|
|
482
619
|
//// Storage
|
|
620
|
+
/**
|
|
621
|
+
* @inheritDoc
|
|
622
|
+
*/
|
|
483
623
|
serialize() {
|
|
484
624
|
return {
|
|
485
625
|
...super.serialize(),
|
|
@@ -496,13 +636,21 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
496
636
|
refundTxId: this.refundTxId,
|
|
497
637
|
};
|
|
498
638
|
}
|
|
639
|
+
/**
|
|
640
|
+
* @inheritDoc
|
|
641
|
+
* @internal
|
|
642
|
+
*/
|
|
499
643
|
_getInitiator() {
|
|
500
644
|
return this.recipient;
|
|
501
645
|
}
|
|
502
646
|
//////////////////////////////
|
|
503
647
|
//// Swap ticks & sync
|
|
648
|
+
/**
|
|
649
|
+
* @inheritDoc
|
|
650
|
+
* @internal
|
|
651
|
+
*/
|
|
504
652
|
async _sync(save) {
|
|
505
|
-
if (this.
|
|
653
|
+
if (this._state === OnchainForGasSwapState.PR_CREATED) {
|
|
506
654
|
//Check if it's maybe already paid
|
|
507
655
|
const result = await this.checkAddress(false);
|
|
508
656
|
if (result) {
|
|
@@ -513,6 +661,10 @@ class OnchainForGasSwap extends ISwap_1.ISwap {
|
|
|
513
661
|
}
|
|
514
662
|
return false;
|
|
515
663
|
}
|
|
664
|
+
/**
|
|
665
|
+
* @inheritDoc
|
|
666
|
+
* @internal
|
|
667
|
+
*/
|
|
516
668
|
_tick(save) {
|
|
517
669
|
return Promise.resolve(false);
|
|
518
670
|
}
|