@atomiqlabs/sdk 8.6.4 → 8.6.6
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/SmartChainAssets.d.ts +181 -181
- package/dist/SmartChainAssets.js +181 -181
- package/dist/bitcoin/coinselect2/accumulative.d.ts +6 -6
- package/dist/bitcoin/coinselect2/accumulative.js +51 -52
- package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -6
- package/dist/bitcoin/coinselect2/blackjack.js +37 -38
- package/dist/bitcoin/coinselect2/index.d.ts +17 -19
- package/dist/bitcoin/coinselect2/index.js +69 -69
- package/dist/bitcoin/coinselect2/utils.d.ts +75 -77
- package/dist/bitcoin/coinselect2/utils.js +123 -123
- package/dist/bitcoin/wallet/BitcoinWallet.d.ts +128 -130
- package/dist/bitcoin/wallet/BitcoinWallet.js +322 -322
- package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +78 -78
- package/dist/bitcoin/wallet/IBitcoinWallet.js +20 -21
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +99 -101
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +176 -176
- package/dist/enums/FeeType.d.ts +15 -15
- package/dist/enums/FeeType.js +19 -19
- package/dist/enums/SwapAmountType.d.ts +15 -15
- package/dist/enums/SwapAmountType.js +19 -19
- package/dist/enums/SwapDirection.d.ts +15 -15
- package/dist/enums/SwapDirection.js +19 -19
- package/dist/enums/SwapSide.d.ts +15 -15
- package/dist/enums/SwapSide.js +19 -19
- package/dist/enums/SwapType.d.ts +75 -75
- package/dist/enums/SwapType.js +79 -79
- package/dist/errors/IntermediaryError.d.ts +13 -13
- package/dist/errors/IntermediaryError.js +27 -27
- package/dist/errors/RequestError.d.ts +32 -32
- package/dist/errors/RequestError.js +54 -54
- package/dist/errors/UserError.d.ts +8 -8
- package/dist/errors/UserError.js +16 -16
- package/dist/events/UnifiedSwapEventListener.d.ts +23 -23
- package/dist/events/UnifiedSwapEventListener.js +130 -130
- package/dist/http/HttpUtils.d.ts +27 -27
- package/dist/http/HttpUtils.js +90 -91
- package/dist/http/paramcoders/IParamReader.d.ts +8 -8
- package/dist/http/paramcoders/IParamReader.js +2 -2
- package/dist/http/paramcoders/ParamDecoder.d.ts +42 -44
- package/dist/http/paramcoders/ParamDecoder.js +137 -137
- package/dist/http/paramcoders/ParamEncoder.d.ts +18 -20
- package/dist/http/paramcoders/ParamEncoder.js +36 -36
- package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -26
- package/dist/http/paramcoders/SchemaVerifier.js +145 -145
- package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -11
- package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -57
- package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +11 -13
- package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -26
- package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -16
- package/dist/http/paramcoders/client/StreamingFetchPromise.js +173 -174
- package/dist/index.d.ts +85 -85
- package/dist/index.js +158 -158
- package/dist/intermediaries/Intermediary.d.ts +157 -157
- package/dist/intermediaries/Intermediary.js +142 -142
- package/dist/intermediaries/IntermediaryDiscovery.d.ts +198 -199
- package/dist/intermediaries/IntermediaryDiscovery.js +406 -406
- package/dist/intermediaries/apis/IntermediaryAPI.d.ts +437 -438
- package/dist/intermediaries/apis/IntermediaryAPI.js +603 -602
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +155 -155
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +137 -137
- package/dist/lnurl/LNURL.d.ts +102 -102
- package/dist/lnurl/LNURL.js +321 -321
- package/dist/prices/RedundantSwapPrice.d.ts +110 -110
- package/dist/prices/RedundantSwapPrice.js +222 -222
- package/dist/prices/SingleSwapPrice.d.ts +34 -34
- package/dist/prices/SingleSwapPrice.js +44 -44
- package/dist/prices/SwapPriceWithChain.d.ts +107 -107
- package/dist/prices/SwapPriceWithChain.js +128 -128
- package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -28
- package/dist/prices/abstract/ICachedSwapPrice.js +62 -62
- package/dist/prices/abstract/IPriceProvider.d.ts +81 -81
- package/dist/prices/abstract/IPriceProvider.js +74 -74
- package/dist/prices/abstract/ISwapPrice.d.ts +168 -166
- package/dist/prices/abstract/ISwapPrice.js +279 -267
- package/dist/prices/providers/BinancePriceProvider.d.ts +23 -23
- package/dist/prices/providers/BinancePriceProvider.js +30 -30
- package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +23 -23
- package/dist/prices/providers/CoinGeckoPriceProvider.js +29 -29
- package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +25 -25
- package/dist/prices/providers/CoinPaprikaPriceProvider.js +29 -29
- package/dist/prices/providers/CustomPriceProvider.d.ts +24 -24
- package/dist/prices/providers/CustomPriceProvider.js +35 -35
- package/dist/prices/providers/KrakenPriceProvider.d.ts +38 -38
- package/dist/prices/providers/KrakenPriceProvider.js +45 -45
- package/dist/prices/providers/OKXPriceProvider.d.ts +34 -34
- package/dist/prices/providers/OKXPriceProvider.js +29 -29
- package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +17 -17
- package/dist/prices/providers/abstract/ExchangePriceProvider.js +21 -21
- package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -7
- package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -12
- package/dist/storage/IUnifiedStorage.d.ts +85 -85
- package/dist/storage/IUnifiedStorage.js +2 -2
- package/dist/storage/UnifiedSwapStorage.d.ts +114 -114
- package/dist/storage/UnifiedSwapStorage.js +116 -116
- package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +63 -63
- package/dist/storage-browser/IndexedDBUnifiedStorage.js +298 -298
- package/dist/storage-browser/LocalStorageManager.d.ts +49 -49
- package/dist/storage-browser/LocalStorageManager.js +93 -93
- package/dist/swapper/Swapper.d.ts +686 -687
- package/dist/swapper/Swapper.js +1603 -1603
- package/dist/swapper/SwapperFactory.d.ts +135 -135
- package/dist/swapper/SwapperFactory.js +162 -162
- package/dist/swapper/SwapperUtils.d.ts +200 -200
- package/dist/swapper/SwapperUtils.js +467 -467
- package/dist/swapper/SwapperWithChain.d.ts +404 -404
- package/dist/swapper/SwapperWithChain.js +469 -469
- package/dist/swapper/SwapperWithSigner.d.ts +322 -322
- package/dist/swapper/SwapperWithSigner.js +318 -318
- package/dist/swaps/IAddressSwap.d.ts +22 -22
- package/dist/swaps/IAddressSwap.js +13 -14
- package/dist/swaps/IBTCWalletSwap.d.ts +73 -73
- package/dist/swaps/IBTCWalletSwap.js +17 -18
- package/dist/swaps/IClaimableSwap.d.ts +49 -49
- package/dist/swaps/IClaimableSwap.js +14 -15
- package/dist/swaps/IClaimableSwapWrapper.d.ts +15 -15
- package/dist/swaps/IClaimableSwapWrapper.js +2 -2
- package/dist/swaps/IRefundableSwap.d.ts +43 -43
- package/dist/swaps/IRefundableSwap.js +13 -14
- package/dist/swaps/ISwap.d.ts +386 -387
- package/dist/swaps/ISwap.js +346 -341
- package/dist/swaps/ISwapWithGasDrop.d.ts +21 -21
- package/dist/swaps/ISwapWithGasDrop.js +11 -12
- package/dist/swaps/ISwapWrapper.d.ts +283 -284
- package/dist/swaps/ISwapWrapper.js +353 -353
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +98 -98
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +126 -126
- package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +133 -135
- package/dist/swaps/escrow_swaps/IEscrowSwap.js +169 -169
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +114 -115
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +134 -134
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +98 -101
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +130 -130
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +162 -162
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +190 -190
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +58 -58
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +78 -78
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +529 -531
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +1285 -1285
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +181 -184
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +418 -417
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +581 -583
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +1371 -1371
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +225 -228
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +506 -506
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +458 -458
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +1126 -1126
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +190 -191
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +378 -377
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +403 -403
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +924 -924
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +62 -62
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +112 -112
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +125 -127
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +256 -256
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +241 -242
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +520 -520
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +73 -73
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +155 -155
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +127 -128
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +278 -278
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +630 -630
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1443 -1443
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +213 -207
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +756 -755
- package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +261 -261
- package/dist/swaps/trusted/ln/LnForGasSwap.js +511 -511
- package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +40 -40
- package/dist/swaps/trusted/ln/LnForGasWrapper.js +82 -82
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +342 -342
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +715 -715
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +68 -69
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +92 -92
- package/dist/types/AmountData.d.ts +10 -10
- package/dist/types/AmountData.js +2 -2
- package/dist/types/CustomPriceFunction.d.ts +11 -11
- package/dist/types/CustomPriceFunction.js +2 -2
- package/dist/types/PriceInfoType.d.ts +28 -28
- package/dist/types/PriceInfoType.js +56 -57
- package/dist/types/SwapExecutionAction.d.ts +88 -88
- package/dist/types/SwapExecutionAction.js +2 -2
- package/dist/types/SwapStateInfo.d.ts +5 -5
- package/dist/types/SwapStateInfo.js +2 -2
- package/dist/types/SwapWithSigner.d.ts +17 -17
- package/dist/types/SwapWithSigner.js +42 -43
- package/dist/types/Token.d.ts +99 -99
- package/dist/types/Token.js +76 -76
- package/dist/types/TokenAmount.d.ts +69 -69
- package/dist/types/TokenAmount.js +59 -60
- package/dist/types/fees/Fee.d.ts +50 -50
- package/dist/types/fees/Fee.js +2 -2
- package/dist/types/fees/FeeBreakdown.d.ts +11 -11
- package/dist/types/fees/FeeBreakdown.js +2 -2
- package/dist/types/fees/PercentagePPM.d.ts +17 -17
- package/dist/types/fees/PercentagePPM.js +17 -18
- package/dist/types/lnurl/LNURLPay.d.ts +61 -61
- package/dist/types/lnurl/LNURLPay.js +30 -31
- package/dist/types/lnurl/LNURLWithdraw.d.ts +48 -48
- package/dist/types/lnurl/LNURLWithdraw.js +26 -27
- package/dist/types/wallets/LightningInvoiceCreateService.d.ts +24 -24
- package/dist/types/wallets/LightningInvoiceCreateService.js +14 -15
- package/dist/types/wallets/MinimalBitcoinWalletInterface.d.ts +23 -23
- package/dist/types/wallets/MinimalBitcoinWalletInterface.js +2 -2
- package/dist/types/wallets/MinimalLightningNetworkWalletInterface.d.ts +9 -9
- package/dist/types/wallets/MinimalLightningNetworkWalletInterface.js +2 -2
- package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -1
- package/dist/utils/AutomaticClockDriftCorrection.js +69 -70
- package/dist/utils/BitcoinUtils.d.ts +12 -14
- package/dist/utils/BitcoinUtils.js +101 -102
- package/dist/utils/BitcoinWalletUtils.d.ts +7 -7
- package/dist/utils/BitcoinWalletUtils.js +13 -14
- package/dist/utils/Logger.d.ts +7 -7
- package/dist/utils/Logger.js +11 -12
- package/dist/utils/RetryUtils.d.ts +22 -22
- package/dist/utils/RetryUtils.js +66 -67
- package/dist/utils/SwapUtils.d.ts +88 -88
- package/dist/utils/SwapUtils.js +72 -72
- package/dist/utils/TimeoutUtils.d.ts +17 -17
- package/dist/utils/TimeoutUtils.js +54 -55
- package/dist/utils/TokenUtils.d.ts +19 -19
- package/dist/utils/TokenUtils.js +36 -37
- package/dist/utils/TypeUtils.d.ts +7 -7
- package/dist/utils/TypeUtils.js +2 -2
- package/dist/utils/Utils.d.ts +56 -58
- package/dist/utils/Utils.js +193 -194
- package/package.json +1 -1
- package/src/intermediaries/apis/IntermediaryAPI.ts +4 -2
- package/src/prices/abstract/ISwapPrice.ts +19 -6
- package/src/swaps/ISwap.ts +17 -6
- package/src/swaps/ISwapWrapper.ts +4 -3
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +4 -2
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +4 -1
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +2 -2
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +4 -2
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +6 -6
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +5 -5
- package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +4 -1
- package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +10 -2
- package/src/swaps/trusted/ln/LnForGasWrapper.ts +1 -1
- package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +1 -1
|
@@ -1,630 +1,630 @@
|
|
|
1
|
-
import { ISwap, ISwapInit } from "../ISwap";
|
|
2
|
-
import { ChainType, SpvWithdrawalClaimedState, SpvWithdrawalClosedState, SpvWithdrawalFrontedState } from "@atomiqlabs/base";
|
|
3
|
-
import { SwapType } from "../../enums/SwapType";
|
|
4
|
-
import { SpvFromBTCTypeDefinition, SpvFromBTCWrapper } from "./SpvFromBTCWrapper";
|
|
5
|
-
import { Transaction } from "@scure/btc-signer";
|
|
6
|
-
import { Fee } from "../../types/fees/Fee";
|
|
7
|
-
import { IBitcoinWallet } from "../../bitcoin/wallet/IBitcoinWallet";
|
|
8
|
-
import { IBTCWalletSwap } from "../IBTCWalletSwap";
|
|
9
|
-
import { ISwapWithGasDrop } from "../ISwapWithGasDrop";
|
|
10
|
-
import { MinimalBitcoinWalletInterface, MinimalBitcoinWalletInterfaceWithSigner } from "../../types/wallets/MinimalBitcoinWalletInterface";
|
|
11
|
-
import { IClaimableSwap } from "../IClaimableSwap";
|
|
12
|
-
import { FeeType } from "../../enums/FeeType";
|
|
13
|
-
import { TokenAmount } from "../../types/TokenAmount";
|
|
14
|
-
import { BtcToken, SCToken } from "../../types/Token";
|
|
15
|
-
import { LoggerType } from "../../utils/Logger";
|
|
16
|
-
import { PriceInfoType } from "../../types/PriceInfoType";
|
|
17
|
-
import { SwapExecutionAction, SwapExecutionActionBitcoin } from "../../types/SwapExecutionAction";
|
|
18
|
-
/**
|
|
19
|
-
* State enum for SPV vault (UTXO-controlled vault) based swaps
|
|
20
|
-
* @category Swaps/Bitcoin → Smart chain
|
|
21
|
-
*/
|
|
22
|
-
export declare enum SpvFromBTCSwapState {
|
|
23
|
-
/**
|
|
24
|
-
* Catastrophic failure has occurred when processing the swap on the smart chain side,
|
|
25
|
-
* this implies a bug in the smart contract code or the user and intermediary deliberately
|
|
26
|
-
* creating a bitcoin transaction with invalid format unparsable by the smart contract.
|
|
27
|
-
*/
|
|
28
|
-
CLOSED = -5,
|
|
29
|
-
/**
|
|
30
|
-
* Some of the bitcoin swap transaction inputs were double-spent, this means the swap
|
|
31
|
-
* has failed and no BTC was sent
|
|
32
|
-
*/
|
|
33
|
-
FAILED = -4,
|
|
34
|
-
/**
|
|
35
|
-
* The intermediary (LP) declined to co-sign the submitted PSBT, hence the swap failed
|
|
36
|
-
*/
|
|
37
|
-
DECLINED = -3,
|
|
38
|
-
/**
|
|
39
|
-
* Swap has expired for good and there is no way how it can be executed anymore
|
|
40
|
-
*/
|
|
41
|
-
QUOTE_EXPIRED = -2,
|
|
42
|
-
/**
|
|
43
|
-
* A swap is almost expired, and it should be presented to the user as expired, though
|
|
44
|
-
* there is still a chance that it will be processed
|
|
45
|
-
*/
|
|
46
|
-
QUOTE_SOFT_EXPIRED = -1,
|
|
47
|
-
/**
|
|
48
|
-
* Swap was created, use the {@link SpvFromBTCSwap.getFundedPsbt} or {@link SpvFromBTCSwap.getPsbt} functions
|
|
49
|
-
* to get the bitcoin swap PSBT that should be signed by the user's wallet and then submitted via the
|
|
50
|
-
* {@link SpvFromBTCSwap.submitPsbt} function.
|
|
51
|
-
*/
|
|
52
|
-
CREATED = 0,
|
|
53
|
-
/**
|
|
54
|
-
* Swap bitcoin PSBT was submitted by the client to the SDK
|
|
55
|
-
*/
|
|
56
|
-
SIGNED = 1,
|
|
57
|
-
/**
|
|
58
|
-
* Swap bitcoin PSBT sent to the intermediary (LP), waiting for the intermediary co-sign
|
|
59
|
-
* it and broadcast. You can use the {@link SpvFromBTCSwap.waitTillClaimedOrFronted}
|
|
60
|
-
* function to wait till the intermediary broadcasts the transaction and the transaction
|
|
61
|
-
* confirms.
|
|
62
|
-
*/
|
|
63
|
-
POSTED = 2,
|
|
64
|
-
/**
|
|
65
|
-
* Intermediary (LP) has co-signed and broadcasted the bitcoin transaction. You can use the
|
|
66
|
-
* {@link SpvFromBTCSwap.waitTillClaimedOrFronted} function to wait till the transaction
|
|
67
|
-
* confirms.
|
|
68
|
-
*/
|
|
69
|
-
BROADCASTED = 3,
|
|
70
|
-
/**
|
|
71
|
-
* Settlement on the destination smart chain was fronted and funds were already received
|
|
72
|
-
* by the user, even before the final settlement.
|
|
73
|
-
*/
|
|
74
|
-
FRONTED = 4,
|
|
75
|
-
/**
|
|
76
|
-
* Bitcoin transaction confirmed with necessary amount of confirmations, wait for automatic
|
|
77
|
-
* settlement by the watchtower with the {@link waitTillClaimedOrFronted} function, or settle manually
|
|
78
|
-
* using the {@link FromBTCSwap.claim} or {@link FromBTCSwap.txsClaim} function.
|
|
79
|
-
*/
|
|
80
|
-
BTC_TX_CONFIRMED = 5,
|
|
81
|
-
/**
|
|
82
|
-
* Swap settled on the smart chain and funds received
|
|
83
|
-
*/
|
|
84
|
-
CLAIMED = 6
|
|
85
|
-
}
|
|
86
|
-
export type SpvFromBTCSwapInit = ISwapInit & {
|
|
87
|
-
quoteId: string;
|
|
88
|
-
recipient: string;
|
|
89
|
-
vaultOwner: string;
|
|
90
|
-
vaultId: bigint;
|
|
91
|
-
vaultRequiredConfirmations: number;
|
|
92
|
-
vaultTokenMultipliers: bigint[];
|
|
93
|
-
vaultBtcAddress: string;
|
|
94
|
-
vaultUtxo: string;
|
|
95
|
-
vaultUtxoValue: bigint;
|
|
96
|
-
btcDestinationAddress: string;
|
|
97
|
-
btcAmount: bigint;
|
|
98
|
-
btcAmountSwap: bigint;
|
|
99
|
-
btcAmountGas: bigint;
|
|
100
|
-
minimumBtcFeeRate: number;
|
|
101
|
-
outputTotalSwap: bigint;
|
|
102
|
-
outputSwapToken: string;
|
|
103
|
-
outputTotalGas: bigint;
|
|
104
|
-
outputGasToken: string;
|
|
105
|
-
gasSwapFeeBtc: bigint;
|
|
106
|
-
gasSwapFee: bigint;
|
|
107
|
-
callerFeeShare: bigint;
|
|
108
|
-
frontingFeeShare: bigint;
|
|
109
|
-
executionFeeShare: bigint;
|
|
110
|
-
genesisSmartChainBlockHeight: number;
|
|
111
|
-
gasPricingInfo?: PriceInfoType;
|
|
112
|
-
};
|
|
113
|
-
export declare function isSpvFromBTCSwapInit(obj: any): obj is SpvFromBTCSwapInit;
|
|
114
|
-
/**
|
|
115
|
-
* New spv vault (UTXO-controlled vault) based swaps for Bitcoin -> Smart chain swaps not requiring
|
|
116
|
-
* any initiation on the destination chain, and with the added possibility for the user to receive
|
|
117
|
-
* a native token on the destination chain as part of the swap (a "gas drop" feature).
|
|
118
|
-
*
|
|
119
|
-
* @category Swaps/Bitcoin → Smart chain
|
|
120
|
-
*/
|
|
121
|
-
export declare class SpvFromBTCSwap<T extends ChainType> extends ISwap<T, SpvFromBTCTypeDefinition<T>> implements IBTCWalletSwap, ISwapWithGasDrop<T>, IClaimableSwap<T, SpvFromBTCTypeDefinition<T>, SpvFromBTCSwapState> {
|
|
122
|
-
protected readonly currentVersion: number;
|
|
123
|
-
readonly TYPE: SwapType.SPV_VAULT_FROM_BTC;
|
|
124
|
-
/**
|
|
125
|
-
* @internal
|
|
126
|
-
*/
|
|
127
|
-
protected readonly swapStateDescription: {
|
|
128
|
-
[-5]: string;
|
|
129
|
-
[-4]: string;
|
|
130
|
-
[-3]: string;
|
|
131
|
-
[-2]: string;
|
|
132
|
-
[-1]: string;
|
|
133
|
-
0: string;
|
|
134
|
-
1: string;
|
|
135
|
-
2: string;
|
|
136
|
-
3: string;
|
|
137
|
-
4: string;
|
|
138
|
-
5: string;
|
|
139
|
-
6: string;
|
|
140
|
-
};
|
|
141
|
-
/**
|
|
142
|
-
* @internal
|
|
143
|
-
*/
|
|
144
|
-
protected readonly swapStateName: (state: number) => string;
|
|
145
|
-
/**
|
|
146
|
-
* @inheritDoc
|
|
147
|
-
* @internal
|
|
148
|
-
*/
|
|
149
|
-
protected readonly logger: LoggerType;
|
|
150
|
-
private readonly quoteId;
|
|
151
|
-
private readonly recipient;
|
|
152
|
-
private readonly vaultOwner;
|
|
153
|
-
private readonly vaultId;
|
|
154
|
-
private readonly vaultRequiredConfirmations;
|
|
155
|
-
private readonly vaultTokenMultipliers;
|
|
156
|
-
private readonly vaultBtcAddress;
|
|
157
|
-
private readonly vaultUtxo;
|
|
158
|
-
private readonly vaultUtxoValue;
|
|
159
|
-
private readonly btcDestinationAddress;
|
|
160
|
-
private readonly btcAmount;
|
|
161
|
-
private readonly btcAmountSwap;
|
|
162
|
-
private readonly btcAmountGas;
|
|
163
|
-
private readonly outputTotalSwap;
|
|
164
|
-
private readonly outputSwapToken;
|
|
165
|
-
private readonly outputTotalGas;
|
|
166
|
-
private readonly outputGasToken;
|
|
167
|
-
private readonly gasSwapFeeBtc;
|
|
168
|
-
private readonly gasSwapFee;
|
|
169
|
-
private readonly callerFeeShare;
|
|
170
|
-
private readonly frontingFeeShare;
|
|
171
|
-
private readonly executionFeeShare;
|
|
172
|
-
private readonly gasPricingInfo?;
|
|
173
|
-
private posted?;
|
|
174
|
-
/**
|
|
175
|
-
* @internal
|
|
176
|
-
*/
|
|
177
|
-
readonly _genesisSmartChainBlockHeight: number;
|
|
178
|
-
/**
|
|
179
|
-
* @internal
|
|
180
|
-
*/
|
|
181
|
-
_senderAddress?: string;
|
|
182
|
-
/**
|
|
183
|
-
* @internal
|
|
184
|
-
*/
|
|
185
|
-
_claimTxId?: string;
|
|
186
|
-
/**
|
|
187
|
-
* @internal
|
|
188
|
-
*/
|
|
189
|
-
_frontTxId?: string;
|
|
190
|
-
/**
|
|
191
|
-
* @internal
|
|
192
|
-
*/
|
|
193
|
-
_data?: T["SpvVaultWithdrawalData"];
|
|
194
|
-
/**
|
|
195
|
-
* Minimum fee rate in sats/vB that the input bitcoin transaction needs to pay
|
|
196
|
-
*/
|
|
197
|
-
readonly minimumBtcFeeRate: number;
|
|
198
|
-
/**
|
|
199
|
-
* Time at which the SDK realized the bitcoin transaction was confirmed
|
|
200
|
-
* @private
|
|
201
|
-
*/
|
|
202
|
-
private btcTxConfirmedAt?;
|
|
203
|
-
constructor(wrapper: SpvFromBTCWrapper<T>, init: SpvFromBTCSwapInit);
|
|
204
|
-
constructor(wrapper: SpvFromBTCWrapper<T>, obj: any);
|
|
205
|
-
/**
|
|
206
|
-
* @inheritDoc
|
|
207
|
-
* @internal
|
|
208
|
-
*/
|
|
209
|
-
protected upgradeVersion(): void;
|
|
210
|
-
/**
|
|
211
|
-
* @inheritDoc
|
|
212
|
-
* @internal
|
|
213
|
-
*/
|
|
214
|
-
protected tryCalculateSwapFee(): void;
|
|
215
|
-
/**
|
|
216
|
-
* @inheritDoc
|
|
217
|
-
*/
|
|
218
|
-
refreshPriceData(): Promise<void>;
|
|
219
|
-
/**
|
|
220
|
-
* @inheritDoc
|
|
221
|
-
* @internal
|
|
222
|
-
*/
|
|
223
|
-
_getInitiator(): string;
|
|
224
|
-
/**
|
|
225
|
-
* @inheritDoc
|
|
226
|
-
* @internal
|
|
227
|
-
*/
|
|
228
|
-
_getEscrowHash(): string | null;
|
|
229
|
-
/**
|
|
230
|
-
* @inheritDoc
|
|
231
|
-
*/
|
|
232
|
-
getId(): string;
|
|
233
|
-
/**
|
|
234
|
-
* @inheritDoc
|
|
235
|
-
*/
|
|
236
|
-
getQuoteExpiry(): number;
|
|
237
|
-
/**
|
|
238
|
-
* @inheritDoc
|
|
239
|
-
* @internal
|
|
240
|
-
*/
|
|
241
|
-
_verifyQuoteDefinitelyExpired(): Promise<boolean>;
|
|
242
|
-
/**
|
|
243
|
-
* @inheritDoc
|
|
244
|
-
* @internal
|
|
245
|
-
*/
|
|
246
|
-
_verifyQuoteValid(): Promise<boolean>;
|
|
247
|
-
/**
|
|
248
|
-
* @inheritDoc
|
|
249
|
-
*/
|
|
250
|
-
getOutputAddress(): string | null;
|
|
251
|
-
/**
|
|
252
|
-
* @inheritDoc
|
|
253
|
-
*/
|
|
254
|
-
getOutputTxId(): string | null;
|
|
255
|
-
/**
|
|
256
|
-
* @inheritDoc
|
|
257
|
-
*/
|
|
258
|
-
getInputAddress(): string | null;
|
|
259
|
-
/**
|
|
260
|
-
* @inheritDoc
|
|
261
|
-
*/
|
|
262
|
-
getInputTxId(): string | null;
|
|
263
|
-
/**
|
|
264
|
-
* @inheritDoc
|
|
265
|
-
*/
|
|
266
|
-
requiresAction(): boolean;
|
|
267
|
-
/**
|
|
268
|
-
* @inheritDoc
|
|
269
|
-
*/
|
|
270
|
-
isFinished(): boolean;
|
|
271
|
-
/**
|
|
272
|
-
* @inheritDoc
|
|
273
|
-
*/
|
|
274
|
-
isClaimable(): boolean;
|
|
275
|
-
/**
|
|
276
|
-
* @inheritDoc
|
|
277
|
-
*/
|
|
278
|
-
isSuccessful(): boolean;
|
|
279
|
-
/**
|
|
280
|
-
* @inheritDoc
|
|
281
|
-
*/
|
|
282
|
-
isFailed(): boolean;
|
|
283
|
-
/**
|
|
284
|
-
* @inheritDoc
|
|
285
|
-
*/
|
|
286
|
-
isInProgress(): boolean;
|
|
287
|
-
/**
|
|
288
|
-
* @inheritDoc
|
|
289
|
-
*/
|
|
290
|
-
isQuoteExpired(): boolean;
|
|
291
|
-
/**
|
|
292
|
-
* @inheritDoc
|
|
293
|
-
*/
|
|
294
|
-
isQuoteSoftExpired(): boolean;
|
|
295
|
-
/**
|
|
296
|
-
* Returns the data about used spv vault (UTXO-controlled vault) to perform the swap
|
|
297
|
-
*/
|
|
298
|
-
getSpvVaultData(): {
|
|
299
|
-
owner: string;
|
|
300
|
-
vaultId: bigint;
|
|
301
|
-
utxo: string;
|
|
302
|
-
};
|
|
303
|
-
/**
|
|
304
|
-
* Returns the input BTC amount in sats without any fees
|
|
305
|
-
*
|
|
306
|
-
* @internal
|
|
307
|
-
*/
|
|
308
|
-
protected getInputSwapAmountWithoutFee(): bigint;
|
|
309
|
-
/**
|
|
310
|
-
* Returns the input gas BTC amount in sats without any fees
|
|
311
|
-
*
|
|
312
|
-
* @internal
|
|
313
|
-
*/
|
|
314
|
-
protected getInputGasAmountWithoutFee(): bigint;
|
|
315
|
-
/**
|
|
316
|
-
* Returns to total input BTC amount in sats without any fees (this is BTC amount for the swap + BTC amount
|
|
317
|
-
* for the gas drop).
|
|
318
|
-
*
|
|
319
|
-
* @internal
|
|
320
|
-
*/
|
|
321
|
-
protected getInputAmountWithoutFee(): bigint;
|
|
322
|
-
/**
|
|
323
|
-
* Returns the swap output amount without any fees, this value is therefore always higher than
|
|
324
|
-
* the actual received output.
|
|
325
|
-
*
|
|
326
|
-
* @internal
|
|
327
|
-
*/
|
|
328
|
-
protected getOutputWithoutFee(): TokenAmount<SCToken<T["ChainId"]>, true>;
|
|
329
|
-
/**
|
|
330
|
-
* Returns the swap fee charged by the intermediary (LP) on this swap
|
|
331
|
-
*
|
|
332
|
-
* @internal
|
|
333
|
-
*/
|
|
334
|
-
protected getSwapFee(): Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
|
|
335
|
-
/**
|
|
336
|
-
* Returns the fee to be paid to watchtowers on the destination chain to automatically
|
|
337
|
-
* process and settle this swap without requiring any user interaction
|
|
338
|
-
*
|
|
339
|
-
* @internal
|
|
340
|
-
*/
|
|
341
|
-
protected getWatchtowerFee(): Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
|
|
342
|
-
/**
|
|
343
|
-
* @inheritDoc
|
|
344
|
-
*/
|
|
345
|
-
getFee(): Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
|
|
346
|
-
/**
|
|
347
|
-
* @inheritDoc
|
|
348
|
-
*/
|
|
349
|
-
getFeeBreakdown(): [
|
|
350
|
-
{
|
|
351
|
-
type: FeeType.SWAP;
|
|
352
|
-
fee: Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
|
|
353
|
-
},
|
|
354
|
-
{
|
|
355
|
-
type: FeeType.NETWORK_OUTPUT;
|
|
356
|
-
fee: Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
|
|
357
|
-
}
|
|
358
|
-
];
|
|
359
|
-
/**
|
|
360
|
-
* @inheritDoc
|
|
361
|
-
*/
|
|
362
|
-
getOutputToken(): SCToken<T["ChainId"]>;
|
|
363
|
-
/**
|
|
364
|
-
* @inheritDoc
|
|
365
|
-
*/
|
|
366
|
-
getOutput(): TokenAmount<SCToken<T["ChainId"]>, true>;
|
|
367
|
-
/**
|
|
368
|
-
* @inheritDoc
|
|
369
|
-
*/
|
|
370
|
-
getGasDropOutput(): TokenAmount<SCToken<T["ChainId"]>, true>;
|
|
371
|
-
/**
|
|
372
|
-
* @inheritDoc
|
|
373
|
-
*/
|
|
374
|
-
getInputWithoutFee(): TokenAmount<BtcToken<false>, true>;
|
|
375
|
-
/**
|
|
376
|
-
* @inheritDoc
|
|
377
|
-
*/
|
|
378
|
-
getInputToken(): BtcToken<false>;
|
|
379
|
-
/**
|
|
380
|
-
* @inheritDoc
|
|
381
|
-
*/
|
|
382
|
-
getInput(): TokenAmount<BtcToken<false>, true>;
|
|
383
|
-
/**
|
|
384
|
-
* @inheritDoc
|
|
385
|
-
*/
|
|
386
|
-
getRequiredConfirmationsCount(): number;
|
|
387
|
-
/**
|
|
388
|
-
* Returns raw transaction details that can be used to manually create a swap PSBT. It is better to use
|
|
389
|
-
* the {@link getPsbt} or {@link getFundedPsbt} function retrieve an already prepared PSBT.
|
|
390
|
-
*/
|
|
391
|
-
getTransactionDetails(): Promise<{
|
|
392
|
-
in0txid: string;
|
|
393
|
-
in0vout: number;
|
|
394
|
-
in0sequence: number;
|
|
395
|
-
vaultAmount: bigint;
|
|
396
|
-
vaultScript: Uint8Array;
|
|
397
|
-
in1sequence: number;
|
|
398
|
-
out1script: Uint8Array;
|
|
399
|
-
out2amount: bigint;
|
|
400
|
-
out2script: Uint8Array;
|
|
401
|
-
locktime: number;
|
|
402
|
-
}>;
|
|
403
|
-
/**
|
|
404
|
-
* Returns the raw PSBT (not funded), the wallet should fund the PSBT (add its inputs) and importantly **set the nSequence field of the
|
|
405
|
-
* 2nd input** (input 1 - indexing from 0) to the value returned in `in1sequence`, sign the PSBT and then pass
|
|
406
|
-
* it back to the swap with {@link submitPsbt} function.
|
|
407
|
-
*/
|
|
408
|
-
getPsbt(): Promise<{
|
|
409
|
-
psbt: Transaction;
|
|
410
|
-
psbtHex: string;
|
|
411
|
-
psbtBase64: string;
|
|
412
|
-
in1sequence: number;
|
|
413
|
-
}>;
|
|
414
|
-
/**
|
|
415
|
-
* Returns the PSBT that is already funded with wallet's UTXOs (runs a coin-selection algorithm to choose UTXOs to use),
|
|
416
|
-
* also returns inputs indices that need to be signed by the wallet before submitting the PSBT back to the SDK with
|
|
417
|
-
* {@link submitPsbt}
|
|
418
|
-
*
|
|
419
|
-
* @remarks
|
|
420
|
-
* Note that when passing the `feeRate` argument, the fee must be at least {@link minimumBtcFeeRate} sats/vB.
|
|
421
|
-
*
|
|
422
|
-
* @param _bitcoinWallet Sender's bitcoin wallet
|
|
423
|
-
* @param feeRate Optional fee rate in sats/vB for the transaction
|
|
424
|
-
* @param additionalOutputs additional outputs to add to the PSBT - can be used to collect fees from users
|
|
425
|
-
*/
|
|
426
|
-
getFundedPsbt(_bitcoinWallet: IBitcoinWallet | MinimalBitcoinWalletInterface, feeRate?: number, additionalOutputs?: ({
|
|
427
|
-
amount: bigint;
|
|
428
|
-
outputScript: Uint8Array;
|
|
429
|
-
} | {
|
|
430
|
-
amount: bigint;
|
|
431
|
-
address: string;
|
|
432
|
-
})[]): Promise<{
|
|
433
|
-
psbt: Transaction;
|
|
434
|
-
psbtHex: string;
|
|
435
|
-
psbtBase64: string;
|
|
436
|
-
signInputs: number[];
|
|
437
|
-
}>;
|
|
438
|
-
/**
|
|
439
|
-
* @inheritDoc
|
|
440
|
-
*/
|
|
441
|
-
submitPsbt(_psbt: Transaction | string): Promise<string>;
|
|
442
|
-
/**
|
|
443
|
-
* @inheritDoc
|
|
444
|
-
*/
|
|
445
|
-
estimateBitcoinFee(_bitcoinWallet: IBitcoinWallet | MinimalBitcoinWalletInterface, feeRate?: number): Promise<TokenAmount<BtcToken<false>, true> | null>;
|
|
446
|
-
/**
|
|
447
|
-
* @inheritDoc
|
|
448
|
-
*/
|
|
449
|
-
sendBitcoinTransaction(wallet: IBitcoinWallet | MinimalBitcoinWalletInterfaceWithSigner, feeRate?: number): Promise<string>;
|
|
450
|
-
/**
|
|
451
|
-
* Executes the swap with the provided bitcoin wallet
|
|
452
|
-
*
|
|
453
|
-
* @param wallet Bitcoin wallet to use to sign the bitcoin transaction
|
|
454
|
-
* @param callbacks Callbacks to track the progress of the swap
|
|
455
|
-
* @param options Optional options for the swap like feeRate, AbortSignal, and timeouts/intervals
|
|
456
|
-
*
|
|
457
|
-
* @returns {boolean} Whether a swap was settled automatically by swap watchtowers or requires manual claim by the
|
|
458
|
-
* user, in case `false` is returned the user should call the {@link claim} function to settle the swap on the
|
|
459
|
-
* destination manually
|
|
460
|
-
*/
|
|
461
|
-
execute(wallet: IBitcoinWallet | MinimalBitcoinWalletInterfaceWithSigner, callbacks?: {
|
|
462
|
-
onSourceTransactionSent?: (sourceTxId: string) => void;
|
|
463
|
-
onSourceTransactionConfirmationStatus?: (sourceTxId?: string, confirmations?: number, targetConfirations?: number, etaMs?: number) => void;
|
|
464
|
-
onSourceTransactionConfirmed?: (sourceTxId: string) => void;
|
|
465
|
-
onSwapSettled?: (destinationTxId: string) => void;
|
|
466
|
-
}, options?: {
|
|
467
|
-
feeRate?: number;
|
|
468
|
-
abortSignal?: AbortSignal;
|
|
469
|
-
btcTxCheckIntervalSeconds?: number;
|
|
470
|
-
maxWaitTillAutomaticSettlementSeconds?: number;
|
|
471
|
-
}): Promise<boolean>;
|
|
472
|
-
/**
|
|
473
|
-
* @inheritDoc
|
|
474
|
-
*
|
|
475
|
-
* @param options.bitcoinFeeRate Optional fee rate to use for the created Bitcoin transaction
|
|
476
|
-
* @param options.bitcoinWallet Optional bitcoin wallet address specification to return a funded PSBT,
|
|
477
|
-
* if not provided a raw PSBT is returned instead which necessitates the implementor to manually add
|
|
478
|
-
* inputs to the bitcoin transaction and **set the nSequence field of the 2nd input** (input 1 -
|
|
479
|
-
* indexing from 0) to the value returned in `in1sequence`
|
|
480
|
-
*/
|
|
481
|
-
txsExecute(options?: {
|
|
482
|
-
bitcoinFeeRate?: number;
|
|
483
|
-
bitcoinWallet?: MinimalBitcoinWalletInterface;
|
|
484
|
-
}): Promise<[
|
|
485
|
-
SwapExecutionActionBitcoin<"RAW_PSBT" | "FUNDED_PSBT">
|
|
486
|
-
]>;
|
|
487
|
-
/**
|
|
488
|
-
* @inheritDoc
|
|
489
|
-
*
|
|
490
|
-
* @param options.bitcoinFeeRate Optional fee rate to use for the created Bitcoin transaction
|
|
491
|
-
* @param options.bitcoinWallet Optional bitcoin wallet address specification to return a funded PSBT,
|
|
492
|
-
* if not provided a raw PSBT is returned instead which necessitates the implementor to manually add
|
|
493
|
-
* inputs to the bitcoin transaction and **set the nSequence field of the 2nd input** (input 1 -
|
|
494
|
-
* indexing from 0) to the value returned in `in1sequence`
|
|
495
|
-
* @param options.manualSettlementSmartChainSigner Optional smart chain signer to create a manual claim (settlement) transaction
|
|
496
|
-
* @param options.maxWaitTillAutomaticSettlementSeconds Maximum time to wait for an automatic settlement after
|
|
497
|
-
* the bitcoin transaction is confirmed (defaults to 60 seconds)
|
|
498
|
-
*/
|
|
499
|
-
getCurrentActions(options?: {
|
|
500
|
-
bitcoinFeeRate?: number;
|
|
501
|
-
bitcoinWallet?: MinimalBitcoinWalletInterface;
|
|
502
|
-
manualSettlementSmartChainSigner?: string | T["Signer"] | T["NativeSigner"];
|
|
503
|
-
maxWaitTillAutomaticSettlementSeconds?: number;
|
|
504
|
-
}): Promise<SwapExecutionAction<T>[]>;
|
|
505
|
-
/**
|
|
506
|
-
* Checks whether a bitcoin payment was already made, returns the payment or null when no payment has been made.
|
|
507
|
-
* @internal
|
|
508
|
-
*/
|
|
509
|
-
protected getBitcoinPayment(): Promise<{
|
|
510
|
-
txId: string;
|
|
511
|
-
confirmations: number;
|
|
512
|
-
targetConfirmations: number;
|
|
513
|
-
inputAddresses?: string[];
|
|
514
|
-
} | null>;
|
|
515
|
-
/**
|
|
516
|
-
* @inheritDoc
|
|
517
|
-
*
|
|
518
|
-
* @throws {Error} if in invalid state (must be {@link SpvFromBTCSwapState.POSTED} or
|
|
519
|
-
* {@link SpvFromBTCSwapState.BROADCASTED} states)
|
|
520
|
-
*/
|
|
521
|
-
waitForBitcoinTransaction(updateCallback?: (txId?: string, confirmations?: number, targetConfirmations?: number, txEtaMs?: number) => void, checkIntervalSeconds?: number, abortSignal?: AbortSignal): Promise<string>;
|
|
522
|
-
/**
|
|
523
|
-
* Returns transactions for settling (claiming) the swap if the swap requires manual settlement, you can check so
|
|
524
|
-
* with isClaimable. After sending the transaction manually be sure to call the waitTillClaimed function to wait
|
|
525
|
-
* till the claim transaction is observed, processed by the SDK and state of the swap properly updated.
|
|
526
|
-
*
|
|
527
|
-
* @remarks
|
|
528
|
-
* Might also return transactions necessary to sync the bitcoin light client.
|
|
529
|
-
*
|
|
530
|
-
* @param _signer Address of the signer to create the claim transactions for, can also be different to the recipient
|
|
531
|
-
*
|
|
532
|
-
* @throws {Error} If the swap is in invalid state (must be {@link SpvFromBTCSwapState.BTC_TX_CONFIRMED})
|
|
533
|
-
*/
|
|
534
|
-
txsClaim(_signer?: string | T["Signer"] | T["NativeSigner"]): Promise<T["TX"][]>;
|
|
535
|
-
/**
|
|
536
|
-
* Settles the swap by claiming the funds on the destination chain if the swap requires manual settlement, you can
|
|
537
|
-
* check so with isClaimable.
|
|
538
|
-
*
|
|
539
|
-
* @remarks
|
|
540
|
-
* Might also sync the bitcoin light client during the process.
|
|
541
|
-
*
|
|
542
|
-
* @param _signer Signer to use for signing the settlement transactions, can also be different to the recipient
|
|
543
|
-
* @param abortSignal Abort signal
|
|
544
|
-
* @param onBeforeTxSent Optional callback triggered before the claim transaction is broadcasted
|
|
545
|
-
*
|
|
546
|
-
* @throws {Error} If the swap is in invalid state (must be {@link SpvFromBTCSwapState.BTC_TX_CONFIRMED})
|
|
547
|
-
*/
|
|
548
|
-
claim(_signer: T["Signer"] | T["NativeSigner"], abortSignal?: AbortSignal, onBeforeTxSent?: (txId: string) => void): Promise<string>;
|
|
549
|
-
/**
|
|
550
|
-
* Periodically checks the chain to see whether the swap was finished (claimed or refunded)
|
|
551
|
-
*
|
|
552
|
-
* @param abortSignal
|
|
553
|
-
* @param interval How often to check (in seconds), default to 5s
|
|
554
|
-
* @internal
|
|
555
|
-
*/
|
|
556
|
-
protected watchdogWaitTillResult(abortSignal?: AbortSignal, interval?: number): Promise<SpvWithdrawalClaimedState | SpvWithdrawalFrontedState | SpvWithdrawalClosedState>;
|
|
557
|
-
/**
|
|
558
|
-
* Waits till the swap is successfully settled (claimed), should be called after sending the claim (settlement)
|
|
559
|
-
* transactions manually to wait till the SDK processes the settlement and updates the swap state accordingly.
|
|
560
|
-
*
|
|
561
|
-
* @remarks
|
|
562
|
-
* This is an alias for the {@link waitTillClaimedOrFronted} function and will also resolve if the swap has
|
|
563
|
-
* been fronted (not necessarily claimed)
|
|
564
|
-
*
|
|
565
|
-
* @param maxWaitTimeSeconds – Maximum time in seconds to wait for the swap to be settled
|
|
566
|
-
* @param abortSignal – AbortSignal
|
|
567
|
-
*
|
|
568
|
-
* @returns Whether the swap was claimed in time or not
|
|
569
|
-
*/
|
|
570
|
-
waitTillClaimed(maxWaitTimeSeconds?: number, abortSignal?: AbortSignal): Promise<boolean>;
|
|
571
|
-
/**
|
|
572
|
-
* Waits till the swap is successfully fronted or settled on the destination chain
|
|
573
|
-
*
|
|
574
|
-
* @param maxWaitTimeSeconds Maximum time in seconds to wait for the swap to be settled (by default
|
|
575
|
-
* it waits indefinitely)
|
|
576
|
-
* @param abortSignal Abort signal
|
|
577
|
-
*
|
|
578
|
-
* @returns {boolean} whether the swap was claimed or fronted automatically or not, if the swap was not claimed
|
|
579
|
-
* the user can claim manually through the {@link claim} function
|
|
580
|
-
*/
|
|
581
|
-
waitTillClaimedOrFronted(maxWaitTimeSeconds?: number, abortSignal?: AbortSignal): Promise<boolean>;
|
|
582
|
-
/**
|
|
583
|
-
* Waits till the bitcoin transaction confirms and swap settled on the destination chain
|
|
584
|
-
*
|
|
585
|
-
* @param updateCallback Callback called when txId is found, and also called with subsequent confirmations
|
|
586
|
-
* @param checkIntervalSeconds How often to check the bitcoin transaction (5 seconds by default)
|
|
587
|
-
* @param abortSignal Abort signal
|
|
588
|
-
*
|
|
589
|
-
* @throws {Error} if in invalid state (must be {@link SpvFromBTCSwapState.POSTED} or
|
|
590
|
-
* {@link SpvFromBTCSwapState.BROADCASTED} states)
|
|
591
|
-
*/
|
|
592
|
-
waitTillExecuted(updateCallback?: (txId?: string, confirmations?: number, targetConfirmations?: number, txEtaMs?: number) => void, checkIntervalSeconds?: number, abortSignal?: AbortSignal): Promise<void>;
|
|
593
|
-
/**
|
|
594
|
-
* @inheritDoc
|
|
595
|
-
*/
|
|
596
|
-
serialize(): any;
|
|
597
|
-
/**
|
|
598
|
-
* Used to set the txId of the bitcoin payment from the on-chain events listener
|
|
599
|
-
*
|
|
600
|
-
* @param txId
|
|
601
|
-
* @internal
|
|
602
|
-
*/
|
|
603
|
-
_setBitcoinTxId(txId: string): Promise<void>;
|
|
604
|
-
private btcTxLastChecked?;
|
|
605
|
-
/**
|
|
606
|
-
* @internal
|
|
607
|
-
*/
|
|
608
|
-
_syncStateFromBitcoin(save?: boolean): Promise<boolean>;
|
|
609
|
-
/**
|
|
610
|
-
* Checks the swap's state on-chain and compares it to its internal state, updates/changes it according to on-chain
|
|
611
|
-
* data
|
|
612
|
-
*/
|
|
613
|
-
private syncStateFromChain;
|
|
614
|
-
/**
|
|
615
|
-
* @inheritDoc
|
|
616
|
-
* @internal
|
|
617
|
-
*/
|
|
618
|
-
_sync(save?: boolean): Promise<boolean>;
|
|
619
|
-
/**
|
|
620
|
-
* @inheritDoc
|
|
621
|
-
* @internal
|
|
622
|
-
*/
|
|
623
|
-
_tick(save?: boolean): Promise<boolean>;
|
|
624
|
-
/**
|
|
625
|
-
* Checks whether an on-chain withdrawal state should be fetched for this specific swap
|
|
626
|
-
*
|
|
627
|
-
* @internal
|
|
628
|
-
*/
|
|
629
|
-
_shouldCheckWithdrawalState(frontingAddress?: string | null, vaultDataUtxo?: string | null): Promise<boolean>;
|
|
630
|
-
}
|
|
1
|
+
import { ISwap, ISwapInit } from "../ISwap";
|
|
2
|
+
import { ChainType, SpvWithdrawalClaimedState, SpvWithdrawalClosedState, SpvWithdrawalFrontedState } from "@atomiqlabs/base";
|
|
3
|
+
import { SwapType } from "../../enums/SwapType";
|
|
4
|
+
import { SpvFromBTCTypeDefinition, SpvFromBTCWrapper } from "./SpvFromBTCWrapper";
|
|
5
|
+
import { Transaction } from "@scure/btc-signer";
|
|
6
|
+
import { Fee } from "../../types/fees/Fee";
|
|
7
|
+
import { IBitcoinWallet } from "../../bitcoin/wallet/IBitcoinWallet";
|
|
8
|
+
import { IBTCWalletSwap } from "../IBTCWalletSwap";
|
|
9
|
+
import { ISwapWithGasDrop } from "../ISwapWithGasDrop";
|
|
10
|
+
import { MinimalBitcoinWalletInterface, MinimalBitcoinWalletInterfaceWithSigner } from "../../types/wallets/MinimalBitcoinWalletInterface";
|
|
11
|
+
import { IClaimableSwap } from "../IClaimableSwap";
|
|
12
|
+
import { FeeType } from "../../enums/FeeType";
|
|
13
|
+
import { TokenAmount } from "../../types/TokenAmount";
|
|
14
|
+
import { BtcToken, SCToken } from "../../types/Token";
|
|
15
|
+
import { LoggerType } from "../../utils/Logger";
|
|
16
|
+
import { PriceInfoType } from "../../types/PriceInfoType";
|
|
17
|
+
import { SwapExecutionAction, SwapExecutionActionBitcoin } from "../../types/SwapExecutionAction";
|
|
18
|
+
/**
|
|
19
|
+
* State enum for SPV vault (UTXO-controlled vault) based swaps
|
|
20
|
+
* @category Swaps/Bitcoin → Smart chain
|
|
21
|
+
*/
|
|
22
|
+
export declare enum SpvFromBTCSwapState {
|
|
23
|
+
/**
|
|
24
|
+
* Catastrophic failure has occurred when processing the swap on the smart chain side,
|
|
25
|
+
* this implies a bug in the smart contract code or the user and intermediary deliberately
|
|
26
|
+
* creating a bitcoin transaction with invalid format unparsable by the smart contract.
|
|
27
|
+
*/
|
|
28
|
+
CLOSED = -5,
|
|
29
|
+
/**
|
|
30
|
+
* Some of the bitcoin swap transaction inputs were double-spent, this means the swap
|
|
31
|
+
* has failed and no BTC was sent
|
|
32
|
+
*/
|
|
33
|
+
FAILED = -4,
|
|
34
|
+
/**
|
|
35
|
+
* The intermediary (LP) declined to co-sign the submitted PSBT, hence the swap failed
|
|
36
|
+
*/
|
|
37
|
+
DECLINED = -3,
|
|
38
|
+
/**
|
|
39
|
+
* Swap has expired for good and there is no way how it can be executed anymore
|
|
40
|
+
*/
|
|
41
|
+
QUOTE_EXPIRED = -2,
|
|
42
|
+
/**
|
|
43
|
+
* A swap is almost expired, and it should be presented to the user as expired, though
|
|
44
|
+
* there is still a chance that it will be processed
|
|
45
|
+
*/
|
|
46
|
+
QUOTE_SOFT_EXPIRED = -1,
|
|
47
|
+
/**
|
|
48
|
+
* Swap was created, use the {@link SpvFromBTCSwap.getFundedPsbt} or {@link SpvFromBTCSwap.getPsbt} functions
|
|
49
|
+
* to get the bitcoin swap PSBT that should be signed by the user's wallet and then submitted via the
|
|
50
|
+
* {@link SpvFromBTCSwap.submitPsbt} function.
|
|
51
|
+
*/
|
|
52
|
+
CREATED = 0,
|
|
53
|
+
/**
|
|
54
|
+
* Swap bitcoin PSBT was submitted by the client to the SDK
|
|
55
|
+
*/
|
|
56
|
+
SIGNED = 1,
|
|
57
|
+
/**
|
|
58
|
+
* Swap bitcoin PSBT sent to the intermediary (LP), waiting for the intermediary co-sign
|
|
59
|
+
* it and broadcast. You can use the {@link SpvFromBTCSwap.waitTillClaimedOrFronted}
|
|
60
|
+
* function to wait till the intermediary broadcasts the transaction and the transaction
|
|
61
|
+
* confirms.
|
|
62
|
+
*/
|
|
63
|
+
POSTED = 2,
|
|
64
|
+
/**
|
|
65
|
+
* Intermediary (LP) has co-signed and broadcasted the bitcoin transaction. You can use the
|
|
66
|
+
* {@link SpvFromBTCSwap.waitTillClaimedOrFronted} function to wait till the transaction
|
|
67
|
+
* confirms.
|
|
68
|
+
*/
|
|
69
|
+
BROADCASTED = 3,
|
|
70
|
+
/**
|
|
71
|
+
* Settlement on the destination smart chain was fronted and funds were already received
|
|
72
|
+
* by the user, even before the final settlement.
|
|
73
|
+
*/
|
|
74
|
+
FRONTED = 4,
|
|
75
|
+
/**
|
|
76
|
+
* Bitcoin transaction confirmed with necessary amount of confirmations, wait for automatic
|
|
77
|
+
* settlement by the watchtower with the {@link waitTillClaimedOrFronted} function, or settle manually
|
|
78
|
+
* using the {@link FromBTCSwap.claim} or {@link FromBTCSwap.txsClaim} function.
|
|
79
|
+
*/
|
|
80
|
+
BTC_TX_CONFIRMED = 5,
|
|
81
|
+
/**
|
|
82
|
+
* Swap settled on the smart chain and funds received
|
|
83
|
+
*/
|
|
84
|
+
CLAIMED = 6
|
|
85
|
+
}
|
|
86
|
+
export type SpvFromBTCSwapInit = ISwapInit & {
|
|
87
|
+
quoteId: string;
|
|
88
|
+
recipient: string;
|
|
89
|
+
vaultOwner: string;
|
|
90
|
+
vaultId: bigint;
|
|
91
|
+
vaultRequiredConfirmations: number;
|
|
92
|
+
vaultTokenMultipliers: bigint[];
|
|
93
|
+
vaultBtcAddress: string;
|
|
94
|
+
vaultUtxo: string;
|
|
95
|
+
vaultUtxoValue: bigint;
|
|
96
|
+
btcDestinationAddress: string;
|
|
97
|
+
btcAmount: bigint;
|
|
98
|
+
btcAmountSwap: bigint;
|
|
99
|
+
btcAmountGas: bigint;
|
|
100
|
+
minimumBtcFeeRate: number;
|
|
101
|
+
outputTotalSwap: bigint;
|
|
102
|
+
outputSwapToken: string;
|
|
103
|
+
outputTotalGas: bigint;
|
|
104
|
+
outputGasToken: string;
|
|
105
|
+
gasSwapFeeBtc: bigint;
|
|
106
|
+
gasSwapFee: bigint;
|
|
107
|
+
callerFeeShare: bigint;
|
|
108
|
+
frontingFeeShare: bigint;
|
|
109
|
+
executionFeeShare: bigint;
|
|
110
|
+
genesisSmartChainBlockHeight: number;
|
|
111
|
+
gasPricingInfo?: PriceInfoType;
|
|
112
|
+
};
|
|
113
|
+
export declare function isSpvFromBTCSwapInit(obj: any): obj is SpvFromBTCSwapInit;
|
|
114
|
+
/**
|
|
115
|
+
* New spv vault (UTXO-controlled vault) based swaps for Bitcoin -> Smart chain swaps not requiring
|
|
116
|
+
* any initiation on the destination chain, and with the added possibility for the user to receive
|
|
117
|
+
* a native token on the destination chain as part of the swap (a "gas drop" feature).
|
|
118
|
+
*
|
|
119
|
+
* @category Swaps/Bitcoin → Smart chain
|
|
120
|
+
*/
|
|
121
|
+
export declare class SpvFromBTCSwap<T extends ChainType> extends ISwap<T, SpvFromBTCTypeDefinition<T>> implements IBTCWalletSwap, ISwapWithGasDrop<T>, IClaimableSwap<T, SpvFromBTCTypeDefinition<T>, SpvFromBTCSwapState> {
|
|
122
|
+
protected readonly currentVersion: number;
|
|
123
|
+
readonly TYPE: SwapType.SPV_VAULT_FROM_BTC;
|
|
124
|
+
/**
|
|
125
|
+
* @internal
|
|
126
|
+
*/
|
|
127
|
+
protected readonly swapStateDescription: {
|
|
128
|
+
[-5]: string;
|
|
129
|
+
[-4]: string;
|
|
130
|
+
[-3]: string;
|
|
131
|
+
[-2]: string;
|
|
132
|
+
[-1]: string;
|
|
133
|
+
0: string;
|
|
134
|
+
1: string;
|
|
135
|
+
2: string;
|
|
136
|
+
3: string;
|
|
137
|
+
4: string;
|
|
138
|
+
5: string;
|
|
139
|
+
6: string;
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* @internal
|
|
143
|
+
*/
|
|
144
|
+
protected readonly swapStateName: (state: number) => string;
|
|
145
|
+
/**
|
|
146
|
+
* @inheritDoc
|
|
147
|
+
* @internal
|
|
148
|
+
*/
|
|
149
|
+
protected readonly logger: LoggerType;
|
|
150
|
+
private readonly quoteId;
|
|
151
|
+
private readonly recipient;
|
|
152
|
+
private readonly vaultOwner;
|
|
153
|
+
private readonly vaultId;
|
|
154
|
+
private readonly vaultRequiredConfirmations;
|
|
155
|
+
private readonly vaultTokenMultipliers;
|
|
156
|
+
private readonly vaultBtcAddress;
|
|
157
|
+
private readonly vaultUtxo;
|
|
158
|
+
private readonly vaultUtxoValue;
|
|
159
|
+
private readonly btcDestinationAddress;
|
|
160
|
+
private readonly btcAmount;
|
|
161
|
+
private readonly btcAmountSwap;
|
|
162
|
+
private readonly btcAmountGas;
|
|
163
|
+
private readonly outputTotalSwap;
|
|
164
|
+
private readonly outputSwapToken;
|
|
165
|
+
private readonly outputTotalGas;
|
|
166
|
+
private readonly outputGasToken;
|
|
167
|
+
private readonly gasSwapFeeBtc;
|
|
168
|
+
private readonly gasSwapFee;
|
|
169
|
+
private readonly callerFeeShare;
|
|
170
|
+
private readonly frontingFeeShare;
|
|
171
|
+
private readonly executionFeeShare;
|
|
172
|
+
private readonly gasPricingInfo?;
|
|
173
|
+
private posted?;
|
|
174
|
+
/**
|
|
175
|
+
* @internal
|
|
176
|
+
*/
|
|
177
|
+
readonly _genesisSmartChainBlockHeight: number;
|
|
178
|
+
/**
|
|
179
|
+
* @internal
|
|
180
|
+
*/
|
|
181
|
+
_senderAddress?: string;
|
|
182
|
+
/**
|
|
183
|
+
* @internal
|
|
184
|
+
*/
|
|
185
|
+
_claimTxId?: string;
|
|
186
|
+
/**
|
|
187
|
+
* @internal
|
|
188
|
+
*/
|
|
189
|
+
_frontTxId?: string;
|
|
190
|
+
/**
|
|
191
|
+
* @internal
|
|
192
|
+
*/
|
|
193
|
+
_data?: T["SpvVaultWithdrawalData"];
|
|
194
|
+
/**
|
|
195
|
+
* Minimum fee rate in sats/vB that the input bitcoin transaction needs to pay
|
|
196
|
+
*/
|
|
197
|
+
readonly minimumBtcFeeRate: number;
|
|
198
|
+
/**
|
|
199
|
+
* Time at which the SDK realized the bitcoin transaction was confirmed
|
|
200
|
+
* @private
|
|
201
|
+
*/
|
|
202
|
+
private btcTxConfirmedAt?;
|
|
203
|
+
constructor(wrapper: SpvFromBTCWrapper<T>, init: SpvFromBTCSwapInit);
|
|
204
|
+
constructor(wrapper: SpvFromBTCWrapper<T>, obj: any);
|
|
205
|
+
/**
|
|
206
|
+
* @inheritDoc
|
|
207
|
+
* @internal
|
|
208
|
+
*/
|
|
209
|
+
protected upgradeVersion(): void;
|
|
210
|
+
/**
|
|
211
|
+
* @inheritDoc
|
|
212
|
+
* @internal
|
|
213
|
+
*/
|
|
214
|
+
protected tryCalculateSwapFee(): void;
|
|
215
|
+
/**
|
|
216
|
+
* @inheritDoc
|
|
217
|
+
*/
|
|
218
|
+
refreshPriceData(): Promise<void>;
|
|
219
|
+
/**
|
|
220
|
+
* @inheritDoc
|
|
221
|
+
* @internal
|
|
222
|
+
*/
|
|
223
|
+
_getInitiator(): string;
|
|
224
|
+
/**
|
|
225
|
+
* @inheritDoc
|
|
226
|
+
* @internal
|
|
227
|
+
*/
|
|
228
|
+
_getEscrowHash(): string | null;
|
|
229
|
+
/**
|
|
230
|
+
* @inheritDoc
|
|
231
|
+
*/
|
|
232
|
+
getId(): string;
|
|
233
|
+
/**
|
|
234
|
+
* @inheritDoc
|
|
235
|
+
*/
|
|
236
|
+
getQuoteExpiry(): number;
|
|
237
|
+
/**
|
|
238
|
+
* @inheritDoc
|
|
239
|
+
* @internal
|
|
240
|
+
*/
|
|
241
|
+
_verifyQuoteDefinitelyExpired(): Promise<boolean>;
|
|
242
|
+
/**
|
|
243
|
+
* @inheritDoc
|
|
244
|
+
* @internal
|
|
245
|
+
*/
|
|
246
|
+
_verifyQuoteValid(): Promise<boolean>;
|
|
247
|
+
/**
|
|
248
|
+
* @inheritDoc
|
|
249
|
+
*/
|
|
250
|
+
getOutputAddress(): string | null;
|
|
251
|
+
/**
|
|
252
|
+
* @inheritDoc
|
|
253
|
+
*/
|
|
254
|
+
getOutputTxId(): string | null;
|
|
255
|
+
/**
|
|
256
|
+
* @inheritDoc
|
|
257
|
+
*/
|
|
258
|
+
getInputAddress(): string | null;
|
|
259
|
+
/**
|
|
260
|
+
* @inheritDoc
|
|
261
|
+
*/
|
|
262
|
+
getInputTxId(): string | null;
|
|
263
|
+
/**
|
|
264
|
+
* @inheritDoc
|
|
265
|
+
*/
|
|
266
|
+
requiresAction(): boolean;
|
|
267
|
+
/**
|
|
268
|
+
* @inheritDoc
|
|
269
|
+
*/
|
|
270
|
+
isFinished(): boolean;
|
|
271
|
+
/**
|
|
272
|
+
* @inheritDoc
|
|
273
|
+
*/
|
|
274
|
+
isClaimable(): boolean;
|
|
275
|
+
/**
|
|
276
|
+
* @inheritDoc
|
|
277
|
+
*/
|
|
278
|
+
isSuccessful(): boolean;
|
|
279
|
+
/**
|
|
280
|
+
* @inheritDoc
|
|
281
|
+
*/
|
|
282
|
+
isFailed(): boolean;
|
|
283
|
+
/**
|
|
284
|
+
* @inheritDoc
|
|
285
|
+
*/
|
|
286
|
+
isInProgress(): boolean;
|
|
287
|
+
/**
|
|
288
|
+
* @inheritDoc
|
|
289
|
+
*/
|
|
290
|
+
isQuoteExpired(): boolean;
|
|
291
|
+
/**
|
|
292
|
+
* @inheritDoc
|
|
293
|
+
*/
|
|
294
|
+
isQuoteSoftExpired(): boolean;
|
|
295
|
+
/**
|
|
296
|
+
* Returns the data about used spv vault (UTXO-controlled vault) to perform the swap
|
|
297
|
+
*/
|
|
298
|
+
getSpvVaultData(): {
|
|
299
|
+
owner: string;
|
|
300
|
+
vaultId: bigint;
|
|
301
|
+
utxo: string;
|
|
302
|
+
};
|
|
303
|
+
/**
|
|
304
|
+
* Returns the input BTC amount in sats without any fees
|
|
305
|
+
*
|
|
306
|
+
* @internal
|
|
307
|
+
*/
|
|
308
|
+
protected getInputSwapAmountWithoutFee(): bigint;
|
|
309
|
+
/**
|
|
310
|
+
* Returns the input gas BTC amount in sats without any fees
|
|
311
|
+
*
|
|
312
|
+
* @internal
|
|
313
|
+
*/
|
|
314
|
+
protected getInputGasAmountWithoutFee(): bigint;
|
|
315
|
+
/**
|
|
316
|
+
* Returns to total input BTC amount in sats without any fees (this is BTC amount for the swap + BTC amount
|
|
317
|
+
* for the gas drop).
|
|
318
|
+
*
|
|
319
|
+
* @internal
|
|
320
|
+
*/
|
|
321
|
+
protected getInputAmountWithoutFee(): bigint;
|
|
322
|
+
/**
|
|
323
|
+
* Returns the swap output amount without any fees, this value is therefore always higher than
|
|
324
|
+
* the actual received output.
|
|
325
|
+
*
|
|
326
|
+
* @internal
|
|
327
|
+
*/
|
|
328
|
+
protected getOutputWithoutFee(): TokenAmount<SCToken<T["ChainId"]>, true>;
|
|
329
|
+
/**
|
|
330
|
+
* Returns the swap fee charged by the intermediary (LP) on this swap
|
|
331
|
+
*
|
|
332
|
+
* @internal
|
|
333
|
+
*/
|
|
334
|
+
protected getSwapFee(): Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
|
|
335
|
+
/**
|
|
336
|
+
* Returns the fee to be paid to watchtowers on the destination chain to automatically
|
|
337
|
+
* process and settle this swap without requiring any user interaction
|
|
338
|
+
*
|
|
339
|
+
* @internal
|
|
340
|
+
*/
|
|
341
|
+
protected getWatchtowerFee(): Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
|
|
342
|
+
/**
|
|
343
|
+
* @inheritDoc
|
|
344
|
+
*/
|
|
345
|
+
getFee(): Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
|
|
346
|
+
/**
|
|
347
|
+
* @inheritDoc
|
|
348
|
+
*/
|
|
349
|
+
getFeeBreakdown(): [
|
|
350
|
+
{
|
|
351
|
+
type: FeeType.SWAP;
|
|
352
|
+
fee: Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
type: FeeType.NETWORK_OUTPUT;
|
|
356
|
+
fee: Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>;
|
|
357
|
+
}
|
|
358
|
+
];
|
|
359
|
+
/**
|
|
360
|
+
* @inheritDoc
|
|
361
|
+
*/
|
|
362
|
+
getOutputToken(): SCToken<T["ChainId"]>;
|
|
363
|
+
/**
|
|
364
|
+
* @inheritDoc
|
|
365
|
+
*/
|
|
366
|
+
getOutput(): TokenAmount<SCToken<T["ChainId"]>, true>;
|
|
367
|
+
/**
|
|
368
|
+
* @inheritDoc
|
|
369
|
+
*/
|
|
370
|
+
getGasDropOutput(): TokenAmount<SCToken<T["ChainId"]>, true>;
|
|
371
|
+
/**
|
|
372
|
+
* @inheritDoc
|
|
373
|
+
*/
|
|
374
|
+
getInputWithoutFee(): TokenAmount<BtcToken<false>, true>;
|
|
375
|
+
/**
|
|
376
|
+
* @inheritDoc
|
|
377
|
+
*/
|
|
378
|
+
getInputToken(): BtcToken<false>;
|
|
379
|
+
/**
|
|
380
|
+
* @inheritDoc
|
|
381
|
+
*/
|
|
382
|
+
getInput(): TokenAmount<BtcToken<false>, true>;
|
|
383
|
+
/**
|
|
384
|
+
* @inheritDoc
|
|
385
|
+
*/
|
|
386
|
+
getRequiredConfirmationsCount(): number;
|
|
387
|
+
/**
|
|
388
|
+
* Returns raw transaction details that can be used to manually create a swap PSBT. It is better to use
|
|
389
|
+
* the {@link getPsbt} or {@link getFundedPsbt} function retrieve an already prepared PSBT.
|
|
390
|
+
*/
|
|
391
|
+
getTransactionDetails(): Promise<{
|
|
392
|
+
in0txid: string;
|
|
393
|
+
in0vout: number;
|
|
394
|
+
in0sequence: number;
|
|
395
|
+
vaultAmount: bigint;
|
|
396
|
+
vaultScript: Uint8Array;
|
|
397
|
+
in1sequence: number;
|
|
398
|
+
out1script: Uint8Array;
|
|
399
|
+
out2amount: bigint;
|
|
400
|
+
out2script: Uint8Array;
|
|
401
|
+
locktime: number;
|
|
402
|
+
}>;
|
|
403
|
+
/**
|
|
404
|
+
* Returns the raw PSBT (not funded), the wallet should fund the PSBT (add its inputs) and importantly **set the nSequence field of the
|
|
405
|
+
* 2nd input** (input 1 - indexing from 0) to the value returned in `in1sequence`, sign the PSBT and then pass
|
|
406
|
+
* it back to the swap with {@link submitPsbt} function.
|
|
407
|
+
*/
|
|
408
|
+
getPsbt(): Promise<{
|
|
409
|
+
psbt: Transaction;
|
|
410
|
+
psbtHex: string;
|
|
411
|
+
psbtBase64: string;
|
|
412
|
+
in1sequence: number;
|
|
413
|
+
}>;
|
|
414
|
+
/**
|
|
415
|
+
* Returns the PSBT that is already funded with wallet's UTXOs (runs a coin-selection algorithm to choose UTXOs to use),
|
|
416
|
+
* also returns inputs indices that need to be signed by the wallet before submitting the PSBT back to the SDK with
|
|
417
|
+
* {@link submitPsbt}
|
|
418
|
+
*
|
|
419
|
+
* @remarks
|
|
420
|
+
* Note that when passing the `feeRate` argument, the fee must be at least {@link minimumBtcFeeRate} sats/vB.
|
|
421
|
+
*
|
|
422
|
+
* @param _bitcoinWallet Sender's bitcoin wallet
|
|
423
|
+
* @param feeRate Optional fee rate in sats/vB for the transaction
|
|
424
|
+
* @param additionalOutputs additional outputs to add to the PSBT - can be used to collect fees from users
|
|
425
|
+
*/
|
|
426
|
+
getFundedPsbt(_bitcoinWallet: IBitcoinWallet | MinimalBitcoinWalletInterface, feeRate?: number, additionalOutputs?: ({
|
|
427
|
+
amount: bigint;
|
|
428
|
+
outputScript: Uint8Array;
|
|
429
|
+
} | {
|
|
430
|
+
amount: bigint;
|
|
431
|
+
address: string;
|
|
432
|
+
})[]): Promise<{
|
|
433
|
+
psbt: Transaction;
|
|
434
|
+
psbtHex: string;
|
|
435
|
+
psbtBase64: string;
|
|
436
|
+
signInputs: number[];
|
|
437
|
+
}>;
|
|
438
|
+
/**
|
|
439
|
+
* @inheritDoc
|
|
440
|
+
*/
|
|
441
|
+
submitPsbt(_psbt: Transaction | string): Promise<string>;
|
|
442
|
+
/**
|
|
443
|
+
* @inheritDoc
|
|
444
|
+
*/
|
|
445
|
+
estimateBitcoinFee(_bitcoinWallet: IBitcoinWallet | MinimalBitcoinWalletInterface, feeRate?: number): Promise<TokenAmount<BtcToken<false>, true> | null>;
|
|
446
|
+
/**
|
|
447
|
+
* @inheritDoc
|
|
448
|
+
*/
|
|
449
|
+
sendBitcoinTransaction(wallet: IBitcoinWallet | MinimalBitcoinWalletInterfaceWithSigner, feeRate?: number): Promise<string>;
|
|
450
|
+
/**
|
|
451
|
+
* Executes the swap with the provided bitcoin wallet
|
|
452
|
+
*
|
|
453
|
+
* @param wallet Bitcoin wallet to use to sign the bitcoin transaction
|
|
454
|
+
* @param callbacks Callbacks to track the progress of the swap
|
|
455
|
+
* @param options Optional options for the swap like feeRate, AbortSignal, and timeouts/intervals
|
|
456
|
+
*
|
|
457
|
+
* @returns {boolean} Whether a swap was settled automatically by swap watchtowers or requires manual claim by the
|
|
458
|
+
* user, in case `false` is returned the user should call the {@link claim} function to settle the swap on the
|
|
459
|
+
* destination manually
|
|
460
|
+
*/
|
|
461
|
+
execute(wallet: IBitcoinWallet | MinimalBitcoinWalletInterfaceWithSigner, callbacks?: {
|
|
462
|
+
onSourceTransactionSent?: (sourceTxId: string) => void;
|
|
463
|
+
onSourceTransactionConfirmationStatus?: (sourceTxId?: string, confirmations?: number, targetConfirations?: number, etaMs?: number) => void;
|
|
464
|
+
onSourceTransactionConfirmed?: (sourceTxId: string) => void;
|
|
465
|
+
onSwapSettled?: (destinationTxId: string) => void;
|
|
466
|
+
}, options?: {
|
|
467
|
+
feeRate?: number;
|
|
468
|
+
abortSignal?: AbortSignal;
|
|
469
|
+
btcTxCheckIntervalSeconds?: number;
|
|
470
|
+
maxWaitTillAutomaticSettlementSeconds?: number;
|
|
471
|
+
}): Promise<boolean>;
|
|
472
|
+
/**
|
|
473
|
+
* @inheritDoc
|
|
474
|
+
*
|
|
475
|
+
* @param options.bitcoinFeeRate Optional fee rate to use for the created Bitcoin transaction
|
|
476
|
+
* @param options.bitcoinWallet Optional bitcoin wallet address specification to return a funded PSBT,
|
|
477
|
+
* if not provided a raw PSBT is returned instead which necessitates the implementor to manually add
|
|
478
|
+
* inputs to the bitcoin transaction and **set the nSequence field of the 2nd input** (input 1 -
|
|
479
|
+
* indexing from 0) to the value returned in `in1sequence`
|
|
480
|
+
*/
|
|
481
|
+
txsExecute(options?: {
|
|
482
|
+
bitcoinFeeRate?: number;
|
|
483
|
+
bitcoinWallet?: MinimalBitcoinWalletInterface;
|
|
484
|
+
}): Promise<[
|
|
485
|
+
SwapExecutionActionBitcoin<"RAW_PSBT" | "FUNDED_PSBT">
|
|
486
|
+
]>;
|
|
487
|
+
/**
|
|
488
|
+
* @inheritDoc
|
|
489
|
+
*
|
|
490
|
+
* @param options.bitcoinFeeRate Optional fee rate to use for the created Bitcoin transaction
|
|
491
|
+
* @param options.bitcoinWallet Optional bitcoin wallet address specification to return a funded PSBT,
|
|
492
|
+
* if not provided a raw PSBT is returned instead which necessitates the implementor to manually add
|
|
493
|
+
* inputs to the bitcoin transaction and **set the nSequence field of the 2nd input** (input 1 -
|
|
494
|
+
* indexing from 0) to the value returned in `in1sequence`
|
|
495
|
+
* @param options.manualSettlementSmartChainSigner Optional smart chain signer to create a manual claim (settlement) transaction
|
|
496
|
+
* @param options.maxWaitTillAutomaticSettlementSeconds Maximum time to wait for an automatic settlement after
|
|
497
|
+
* the bitcoin transaction is confirmed (defaults to 60 seconds)
|
|
498
|
+
*/
|
|
499
|
+
getCurrentActions(options?: {
|
|
500
|
+
bitcoinFeeRate?: number;
|
|
501
|
+
bitcoinWallet?: MinimalBitcoinWalletInterface;
|
|
502
|
+
manualSettlementSmartChainSigner?: string | T["Signer"] | T["NativeSigner"];
|
|
503
|
+
maxWaitTillAutomaticSettlementSeconds?: number;
|
|
504
|
+
}): Promise<SwapExecutionAction<T>[]>;
|
|
505
|
+
/**
|
|
506
|
+
* Checks whether a bitcoin payment was already made, returns the payment or null when no payment has been made.
|
|
507
|
+
* @internal
|
|
508
|
+
*/
|
|
509
|
+
protected getBitcoinPayment(): Promise<{
|
|
510
|
+
txId: string;
|
|
511
|
+
confirmations: number;
|
|
512
|
+
targetConfirmations: number;
|
|
513
|
+
inputAddresses?: string[];
|
|
514
|
+
} | null>;
|
|
515
|
+
/**
|
|
516
|
+
* @inheritDoc
|
|
517
|
+
*
|
|
518
|
+
* @throws {Error} if in invalid state (must be {@link SpvFromBTCSwapState.POSTED} or
|
|
519
|
+
* {@link SpvFromBTCSwapState.BROADCASTED} states)
|
|
520
|
+
*/
|
|
521
|
+
waitForBitcoinTransaction(updateCallback?: (txId?: string, confirmations?: number, targetConfirmations?: number, txEtaMs?: number) => void, checkIntervalSeconds?: number, abortSignal?: AbortSignal): Promise<string>;
|
|
522
|
+
/**
|
|
523
|
+
* Returns transactions for settling (claiming) the swap if the swap requires manual settlement, you can check so
|
|
524
|
+
* with isClaimable. After sending the transaction manually be sure to call the waitTillClaimed function to wait
|
|
525
|
+
* till the claim transaction is observed, processed by the SDK and state of the swap properly updated.
|
|
526
|
+
*
|
|
527
|
+
* @remarks
|
|
528
|
+
* Might also return transactions necessary to sync the bitcoin light client.
|
|
529
|
+
*
|
|
530
|
+
* @param _signer Address of the signer to create the claim transactions for, can also be different to the recipient
|
|
531
|
+
*
|
|
532
|
+
* @throws {Error} If the swap is in invalid state (must be {@link SpvFromBTCSwapState.BTC_TX_CONFIRMED})
|
|
533
|
+
*/
|
|
534
|
+
txsClaim(_signer?: string | T["Signer"] | T["NativeSigner"]): Promise<T["TX"][]>;
|
|
535
|
+
/**
|
|
536
|
+
* Settles the swap by claiming the funds on the destination chain if the swap requires manual settlement, you can
|
|
537
|
+
* check so with isClaimable.
|
|
538
|
+
*
|
|
539
|
+
* @remarks
|
|
540
|
+
* Might also sync the bitcoin light client during the process.
|
|
541
|
+
*
|
|
542
|
+
* @param _signer Signer to use for signing the settlement transactions, can also be different to the recipient
|
|
543
|
+
* @param abortSignal Abort signal
|
|
544
|
+
* @param onBeforeTxSent Optional callback triggered before the claim transaction is broadcasted
|
|
545
|
+
*
|
|
546
|
+
* @throws {Error} If the swap is in invalid state (must be {@link SpvFromBTCSwapState.BTC_TX_CONFIRMED})
|
|
547
|
+
*/
|
|
548
|
+
claim(_signer: T["Signer"] | T["NativeSigner"], abortSignal?: AbortSignal, onBeforeTxSent?: (txId: string) => void): Promise<string>;
|
|
549
|
+
/**
|
|
550
|
+
* Periodically checks the chain to see whether the swap was finished (claimed or refunded)
|
|
551
|
+
*
|
|
552
|
+
* @param abortSignal
|
|
553
|
+
* @param interval How often to check (in seconds), default to 5s
|
|
554
|
+
* @internal
|
|
555
|
+
*/
|
|
556
|
+
protected watchdogWaitTillResult(abortSignal?: AbortSignal, interval?: number): Promise<SpvWithdrawalClaimedState | SpvWithdrawalFrontedState | SpvWithdrawalClosedState>;
|
|
557
|
+
/**
|
|
558
|
+
* Waits till the swap is successfully settled (claimed), should be called after sending the claim (settlement)
|
|
559
|
+
* transactions manually to wait till the SDK processes the settlement and updates the swap state accordingly.
|
|
560
|
+
*
|
|
561
|
+
* @remarks
|
|
562
|
+
* This is an alias for the {@link waitTillClaimedOrFronted} function and will also resolve if the swap has
|
|
563
|
+
* been fronted (not necessarily claimed)
|
|
564
|
+
*
|
|
565
|
+
* @param maxWaitTimeSeconds – Maximum time in seconds to wait for the swap to be settled
|
|
566
|
+
* @param abortSignal – AbortSignal
|
|
567
|
+
*
|
|
568
|
+
* @returns Whether the swap was claimed in time or not
|
|
569
|
+
*/
|
|
570
|
+
waitTillClaimed(maxWaitTimeSeconds?: number, abortSignal?: AbortSignal): Promise<boolean>;
|
|
571
|
+
/**
|
|
572
|
+
* Waits till the swap is successfully fronted or settled on the destination chain
|
|
573
|
+
*
|
|
574
|
+
* @param maxWaitTimeSeconds Maximum time in seconds to wait for the swap to be settled (by default
|
|
575
|
+
* it waits indefinitely)
|
|
576
|
+
* @param abortSignal Abort signal
|
|
577
|
+
*
|
|
578
|
+
* @returns {boolean} whether the swap was claimed or fronted automatically or not, if the swap was not claimed
|
|
579
|
+
* the user can claim manually through the {@link claim} function
|
|
580
|
+
*/
|
|
581
|
+
waitTillClaimedOrFronted(maxWaitTimeSeconds?: number, abortSignal?: AbortSignal): Promise<boolean>;
|
|
582
|
+
/**
|
|
583
|
+
* Waits till the bitcoin transaction confirms and swap settled on the destination chain
|
|
584
|
+
*
|
|
585
|
+
* @param updateCallback Callback called when txId is found, and also called with subsequent confirmations
|
|
586
|
+
* @param checkIntervalSeconds How often to check the bitcoin transaction (5 seconds by default)
|
|
587
|
+
* @param abortSignal Abort signal
|
|
588
|
+
*
|
|
589
|
+
* @throws {Error} if in invalid state (must be {@link SpvFromBTCSwapState.POSTED} or
|
|
590
|
+
* {@link SpvFromBTCSwapState.BROADCASTED} states)
|
|
591
|
+
*/
|
|
592
|
+
waitTillExecuted(updateCallback?: (txId?: string, confirmations?: number, targetConfirmations?: number, txEtaMs?: number) => void, checkIntervalSeconds?: number, abortSignal?: AbortSignal): Promise<void>;
|
|
593
|
+
/**
|
|
594
|
+
* @inheritDoc
|
|
595
|
+
*/
|
|
596
|
+
serialize(): any;
|
|
597
|
+
/**
|
|
598
|
+
* Used to set the txId of the bitcoin payment from the on-chain events listener
|
|
599
|
+
*
|
|
600
|
+
* @param txId
|
|
601
|
+
* @internal
|
|
602
|
+
*/
|
|
603
|
+
_setBitcoinTxId(txId: string): Promise<void>;
|
|
604
|
+
private btcTxLastChecked?;
|
|
605
|
+
/**
|
|
606
|
+
* @internal
|
|
607
|
+
*/
|
|
608
|
+
_syncStateFromBitcoin(save?: boolean): Promise<boolean>;
|
|
609
|
+
/**
|
|
610
|
+
* Checks the swap's state on-chain and compares it to its internal state, updates/changes it according to on-chain
|
|
611
|
+
* data
|
|
612
|
+
*/
|
|
613
|
+
private syncStateFromChain;
|
|
614
|
+
/**
|
|
615
|
+
* @inheritDoc
|
|
616
|
+
* @internal
|
|
617
|
+
*/
|
|
618
|
+
_sync(save?: boolean): Promise<boolean>;
|
|
619
|
+
/**
|
|
620
|
+
* @inheritDoc
|
|
621
|
+
* @internal
|
|
622
|
+
*/
|
|
623
|
+
_tick(save?: boolean): Promise<boolean>;
|
|
624
|
+
/**
|
|
625
|
+
* Checks whether an on-chain withdrawal state should be fetched for this specific swap
|
|
626
|
+
*
|
|
627
|
+
* @internal
|
|
628
|
+
*/
|
|
629
|
+
_shouldCheckWithdrawalState(frontingAddress?: string | null, vaultDataUtxo?: string | null): Promise<boolean>;
|
|
630
|
+
}
|