@atomiqlabs/sdk 8.6.6 → 8.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +52 -51
- package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -6
- package/dist/bitcoin/coinselect2/blackjack.js +38 -37
- package/dist/bitcoin/coinselect2/index.d.ts +19 -17
- package/dist/bitcoin/coinselect2/index.js +69 -69
- package/dist/bitcoin/coinselect2/utils.d.ts +77 -75
- package/dist/bitcoin/coinselect2/utils.js +123 -123
- package/dist/bitcoin/wallet/BitcoinWallet.d.ts +130 -128
- package/dist/bitcoin/wallet/BitcoinWallet.js +322 -322
- package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +78 -78
- package/dist/bitcoin/wallet/IBitcoinWallet.js +21 -20
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +101 -99
- 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 +91 -90
- package/dist/http/paramcoders/IParamReader.d.ts +8 -8
- package/dist/http/paramcoders/IParamReader.js +2 -2
- package/dist/http/paramcoders/ParamDecoder.d.ts +44 -42
- package/dist/http/paramcoders/ParamDecoder.js +137 -137
- package/dist/http/paramcoders/ParamEncoder.d.ts +20 -18
- 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 +13 -11
- 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 +174 -173
- 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 +199 -198
- package/dist/intermediaries/IntermediaryDiscovery.js +406 -406
- package/dist/intermediaries/apis/IntermediaryAPI.d.ts +439 -437
- package/dist/intermediaries/apis/IntermediaryAPI.js +603 -603
- 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 -168
- package/dist/prices/abstract/ISwapPrice.js +279 -279
- 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 +687 -686
- 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 +14 -13
- package/dist/swaps/IBTCWalletSwap.d.ts +73 -73
- package/dist/swaps/IBTCWalletSwap.js +18 -17
- package/dist/swaps/IClaimableSwap.d.ts +49 -49
- package/dist/swaps/IClaimableSwap.js +15 -14
- 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 +14 -13
- package/dist/swaps/ISwap.d.ts +387 -386
- package/dist/swaps/ISwap.js +346 -346
- package/dist/swaps/ISwapWithGasDrop.d.ts +21 -21
- package/dist/swaps/ISwapWithGasDrop.js +12 -11
- package/dist/swaps/ISwapWrapper.d.ts +285 -283
- 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 +135 -133
- package/dist/swaps/escrow_swaps/IEscrowSwap.js +169 -169
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +115 -114
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +134 -134
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +101 -98
- 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 +531 -529
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +1285 -1285
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +184 -181
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +418 -418
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +583 -581
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +1371 -1371
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +228 -225
- 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 +191 -190
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +378 -378
- 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 +127 -125
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +256 -256
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +242 -241
- 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 +128 -127
- 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 +214 -213
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +756 -756
- 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 +69 -68
- 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 +57 -56
- 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 +43 -42
- 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 +60 -59
- 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 +18 -17
- package/dist/types/lnurl/LNURLPay.d.ts +61 -61
- package/dist/types/lnurl/LNURLPay.js +31 -30
- package/dist/types/lnurl/LNURLWithdraw.d.ts +48 -48
- package/dist/types/lnurl/LNURLWithdraw.js +27 -26
- package/dist/types/wallets/LightningInvoiceCreateService.d.ts +24 -24
- package/dist/types/wallets/LightningInvoiceCreateService.js +15 -14
- 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 +70 -69
- package/dist/utils/BitcoinUtils.d.ts +14 -12
- package/dist/utils/BitcoinUtils.js +102 -101
- package/dist/utils/BitcoinWalletUtils.d.ts +7 -7
- package/dist/utils/BitcoinWalletUtils.js +14 -13
- package/dist/utils/Logger.d.ts +7 -7
- package/dist/utils/Logger.js +12 -11
- package/dist/utils/RetryUtils.d.ts +22 -22
- package/dist/utils/RetryUtils.js +67 -66
- 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 +55 -54
- package/dist/utils/TokenUtils.d.ts +19 -19
- package/dist/utils/TokenUtils.js +37 -36
- package/dist/utils/TypeUtils.d.ts +7 -7
- package/dist/utils/TypeUtils.js +2 -2
- package/dist/utils/Utils.d.ts +58 -56
- package/dist/utils/Utils.js +194 -193
- package/package.json +1 -1
|
@@ -1,256 +1,256 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ToBTCLNSwap = void 0;
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
(obj.
|
|
18
|
-
(obj.
|
|
19
|
-
(
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
//Set of nodes which disallow probing, resulting in 0 confidence reported by the LP
|
|
23
|
-
const SNOWFLAKE_LIST = new Set([
|
|
24
|
-
"038f8f113c580048d847d6949371726653e02b928196bad310e3eda39ff61723f6",
|
|
25
|
-
"03a6ce61fcaacd38d31d4e3ce2d506602818e3856b4b44faff1dde9642ba705976"
|
|
26
|
-
]);
|
|
27
|
-
/**
|
|
28
|
-
* Escrow based (HTLC) swap for Smart chains -> Bitcoin lightning
|
|
29
|
-
*
|
|
30
|
-
* @category Swaps/Smart chain → Lightning
|
|
31
|
-
*/
|
|
32
|
-
class ToBTCLNSwap extends IToBTCSwap_1.IToBTCSwap {
|
|
33
|
-
/**
|
|
34
|
-
* Sets the LNURL data for the swap
|
|
35
|
-
*
|
|
36
|
-
* @internal
|
|
37
|
-
*/
|
|
38
|
-
_setLNURLData(lnurl, successAction) {
|
|
39
|
-
this.lnurl = lnurl;
|
|
40
|
-
this.successAction = successAction;
|
|
41
|
-
}
|
|
42
|
-
constructor(wrapper, initOrObj) {
|
|
43
|
-
if (isToBTCLNSwapInit(initOrObj) && initOrObj.url != null)
|
|
44
|
-
initOrObj.url += "/tobtcln";
|
|
45
|
-
super(wrapper, initOrObj);
|
|
46
|
-
this.TYPE = SwapType_1.SwapType.TO_BTCLN;
|
|
47
|
-
/**
|
|
48
|
-
* @internal
|
|
49
|
-
*/
|
|
50
|
-
this.outputToken = Token_1.BitcoinTokens.BTCLN;
|
|
51
|
-
if (isToBTCLNSwapInit(initOrObj)) {
|
|
52
|
-
this.confidence = initOrObj.confidence;
|
|
53
|
-
this.pr = initOrObj.pr;
|
|
54
|
-
this.lnurl = initOrObj.lnurl;
|
|
55
|
-
this.successAction = initOrObj.successAction;
|
|
56
|
-
this.usesClaimHashAsId = true;
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
this.confidence = initOrObj.confidence;
|
|
60
|
-
this.pr = initOrObj.pr;
|
|
61
|
-
this.lnurl = initOrObj.lnurl;
|
|
62
|
-
this.successAction = initOrObj.successAction;
|
|
63
|
-
this.secret = initOrObj.secret;
|
|
64
|
-
this.usesClaimHashAsId = initOrObj.usesClaimHashAsId ?? false;
|
|
65
|
-
}
|
|
66
|
-
this.logger = (0, Logger_1.getLogger)("ToBTCLN(" + this.getIdentifierHashString() + "): ");
|
|
67
|
-
this.tryRecomputeSwapPrice();
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* @inheritDoc
|
|
71
|
-
* @internal
|
|
72
|
-
*/
|
|
73
|
-
_setPaymentResult(result, check = false) {
|
|
74
|
-
if (result == null)
|
|
75
|
-
return Promise.resolve(false);
|
|
76
|
-
if (result.secret == null)
|
|
77
|
-
throw new IntermediaryError_1.IntermediaryError("No payment secret returned!");
|
|
78
|
-
const secretBuffer = buffer_1.Buffer.from(result.secret, "hex");
|
|
79
|
-
const hash = buffer_1.Buffer.from((0, sha2_1.sha256)(secretBuffer));
|
|
80
|
-
if (check) {
|
|
81
|
-
const claimHash = this.wrapper._contract.getHashForHtlc(hash);
|
|
82
|
-
const expectedClaimHash = buffer_1.Buffer.from(this.getClaimHash(), "hex");
|
|
83
|
-
if (!claimHash.equals(expectedClaimHash))
|
|
84
|
-
throw new IntermediaryError_1.IntermediaryError("Invalid payment secret returned");
|
|
85
|
-
}
|
|
86
|
-
this.pr ??= hash.toString("hex");
|
|
87
|
-
this.secret = result.secret;
|
|
88
|
-
return Promise.resolve(true);
|
|
89
|
-
}
|
|
90
|
-
//////////////////////////////
|
|
91
|
-
//// Amounts & fees
|
|
92
|
-
/**
|
|
93
|
-
* @inheritDoc
|
|
94
|
-
*/
|
|
95
|
-
getOutputToken() {
|
|
96
|
-
return Token_1.BitcoinTokens.BTCLN;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* @inheritDoc
|
|
100
|
-
*/
|
|
101
|
-
getOutput() {
|
|
102
|
-
if (this.pr == null || !this.pr.toLowerCase().startsWith("ln"))
|
|
103
|
-
return (0, TokenAmount_1.toTokenAmount)(null, this.outputToken, this.wrapper._prices, this.pricingInfo);
|
|
104
|
-
const parsedPR = (0, bolt11_1.decode)(this.pr);
|
|
105
|
-
if (parsedPR.millisatoshis == null)
|
|
106
|
-
throw new Error("Swap invoice has no msat amount field!");
|
|
107
|
-
const amount = (BigInt(parsedPR.millisatoshis) + 999n) / 1000n;
|
|
108
|
-
return (0, TokenAmount_1.toTokenAmount)(amount, this.outputToken, this.wrapper._prices, this.pricingInfo);
|
|
109
|
-
}
|
|
110
|
-
//////////////////////////////
|
|
111
|
-
//// Getters & utils
|
|
112
|
-
/**
|
|
113
|
-
* @inheritDoc
|
|
114
|
-
*/
|
|
115
|
-
getOutputTxId() {
|
|
116
|
-
const paymentHash = this.getPaymentHash();
|
|
117
|
-
if (paymentHash == null)
|
|
118
|
-
return null;
|
|
119
|
-
return paymentHash.toString("hex");
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* @inheritDoc
|
|
123
|
-
*/
|
|
124
|
-
getOutputAddress() {
|
|
125
|
-
return this.lnurl ?? this.pr ?? null;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Returns payment secret (pre-image) as a proof of payment
|
|
129
|
-
*/
|
|
130
|
-
getSecret() {
|
|
131
|
-
return this.secret ?? null;
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Returns the confidence of the intermediary that this payment will succeed.
|
|
135
|
-
*
|
|
136
|
-
* @returns Decimal value between 0 and 1, where 0 is not likely and 1 is very likely
|
|
137
|
-
*/
|
|
138
|
-
getConfidence() {
|
|
139
|
-
return this.confidence;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Checks whether a swap is likely to fail, based on the confidence as reported by the intermediary (LP)
|
|
143
|
-
*/
|
|
144
|
-
willLikelyFail() {
|
|
145
|
-
if (this.pr == null || !this.pr.toLowerCase().startsWith("ln"))
|
|
146
|
-
return false;
|
|
147
|
-
const parsedRequest = (0, bolt11_1.decode)(this.pr);
|
|
148
|
-
if (parsedRequest.tagsObject.routing_info != null) {
|
|
149
|
-
for (let route of parsedRequest.tagsObject.routing_info) {
|
|
150
|
-
if (SNOWFLAKE_LIST.has(route.pubkey)) {
|
|
151
|
-
return false;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
return this.confidence === 0;
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Tries to detect if the target lightning invoice is a non-custodial mobile wallet, extract care must be taken
|
|
159
|
-
* for such a wallet **to be online** when attempting to make a swap sending to such a wallet
|
|
160
|
-
*/
|
|
161
|
-
isPayingToNonCustodialWallet() {
|
|
162
|
-
if (this.pr == null || !this.pr.toLowerCase().startsWith("ln"))
|
|
163
|
-
return false;
|
|
164
|
-
const parsedRequest = (0, bolt11_1.decode)(this.pr);
|
|
165
|
-
if (parsedRequest.tagsObject.routing_info != null) {
|
|
166
|
-
return parsedRequest.tagsObject.routing_info.length > 0;
|
|
167
|
-
}
|
|
168
|
-
return false;
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* @inheritDoc
|
|
172
|
-
* @internal
|
|
173
|
-
*/
|
|
174
|
-
getIdentifierHash() {
|
|
175
|
-
const idBuffer = this.usesClaimHashAsId
|
|
176
|
-
? buffer_1.Buffer.from(this.getClaimHash(), "hex")
|
|
177
|
-
: this.getPaymentHash();
|
|
178
|
-
if (this._randomNonce == null)
|
|
179
|
-
return idBuffer;
|
|
180
|
-
return buffer_1.Buffer.concat([idBuffer, buffer_1.Buffer.from(this._randomNonce, "hex")]);
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* @inheritDoc
|
|
184
|
-
* @internal
|
|
185
|
-
*/
|
|
186
|
-
getLpIdentifier() {
|
|
187
|
-
if (this.pr == null)
|
|
188
|
-
return this._data.getEscrowHash();
|
|
189
|
-
if (this.pr.toLowerCase().startsWith("ln")) {
|
|
190
|
-
const parsed = (0, bolt11_1.decode)(this.pr);
|
|
191
|
-
if (parsed.tagsObject.payment_hash == null)
|
|
192
|
-
throw new Error("Swap invoice has no payment hash field!");
|
|
193
|
-
return parsed.tagsObject.payment_hash;
|
|
194
|
-
}
|
|
195
|
-
return this.pr;
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Returns the payment hash of the swap, i.e. a payment hash of the lightning network invoice that
|
|
199
|
-
* is about to be paid
|
|
200
|
-
*/
|
|
201
|
-
getPaymentHash() {
|
|
202
|
-
if (this.pr == null)
|
|
203
|
-
return null;
|
|
204
|
-
if (this.pr.toLowerCase().startsWith("ln")) {
|
|
205
|
-
const parsed = (0, bolt11_1.decode)(this.pr);
|
|
206
|
-
if (parsed.tagsObject.payment_hash == null)
|
|
207
|
-
throw new Error("Swap invoice has no payment hash field!");
|
|
208
|
-
return buffer_1.Buffer.from(parsed.tagsObject.payment_hash, "hex");
|
|
209
|
-
}
|
|
210
|
-
return buffer_1.Buffer.from(this.pr, "hex");
|
|
211
|
-
}
|
|
212
|
-
//////////////////////////////
|
|
213
|
-
//// LNURL-pay
|
|
214
|
-
/**
|
|
215
|
-
* Whether this is an LNURL-pay swap
|
|
216
|
-
*/
|
|
217
|
-
isLNURL() {
|
|
218
|
-
return this.lnurl != null;
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Gets the used LNURL-pay link or `null` if this is not an LNURL-pay swap
|
|
222
|
-
*/
|
|
223
|
-
getLNURL() {
|
|
224
|
-
return this.lnurl ?? null;
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Checks whether this LNURL-pay payment contains a success action
|
|
228
|
-
*/
|
|
229
|
-
hasSuccessAction() {
|
|
230
|
-
return this.successAction != null;
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Returns the success action after a successful payment, else `null`
|
|
234
|
-
*/
|
|
235
|
-
getSuccessAction() {
|
|
236
|
-
return LNURL_1.LNURL.decodeSuccessAction(this.successAction, this.secret);
|
|
237
|
-
}
|
|
238
|
-
//////////////////////////////
|
|
239
|
-
//// Storage
|
|
240
|
-
/**
|
|
241
|
-
* @inheritDoc
|
|
242
|
-
*/
|
|
243
|
-
serialize() {
|
|
244
|
-
return {
|
|
245
|
-
...super.serialize(),
|
|
246
|
-
paymentHash: this.getPaymentHash()?.toString("hex"),
|
|
247
|
-
pr: this.pr,
|
|
248
|
-
confidence: this.confidence,
|
|
249
|
-
secret: this.secret,
|
|
250
|
-
lnurl: this.lnurl,
|
|
251
|
-
successAction: this.successAction,
|
|
252
|
-
usesClaimHashAsId: this.usesClaimHashAsId
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
exports.ToBTCLNSwap = ToBTCLNSwap;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ToBTCLNSwap = exports.isToBTCLNSwapInit = void 0;
|
|
4
|
+
const bolt11_1 = require("@atomiqlabs/bolt11");
|
|
5
|
+
const IToBTCSwap_1 = require("../IToBTCSwap");
|
|
6
|
+
const SwapType_1 = require("../../../../enums/SwapType");
|
|
7
|
+
const buffer_1 = require("buffer");
|
|
8
|
+
const sha2_1 = require("@noble/hashes/sha2");
|
|
9
|
+
const IntermediaryError_1 = require("../../../../errors/IntermediaryError");
|
|
10
|
+
const LNURL_1 = require("../../../../lnurl/LNURL");
|
|
11
|
+
const TokenAmount_1 = require("../../../../types/TokenAmount");
|
|
12
|
+
const Token_1 = require("../../../../types/Token");
|
|
13
|
+
const Logger_1 = require("../../../../utils/Logger");
|
|
14
|
+
function isToBTCLNSwapInit(obj) {
|
|
15
|
+
return typeof (obj.confidence) === "number" &&
|
|
16
|
+
(obj.pr == null || typeof (obj.pr) === "string") &&
|
|
17
|
+
(obj.lnurl == null || typeof (obj.lnurl) === "string") &&
|
|
18
|
+
(obj.successAction == null || (0, LNURL_1.isLNURLPaySuccessAction)(obj.successAction)) &&
|
|
19
|
+
(0, IToBTCSwap_1.isIToBTCSwapInit)(obj);
|
|
20
|
+
}
|
|
21
|
+
exports.isToBTCLNSwapInit = isToBTCLNSwapInit;
|
|
22
|
+
//Set of nodes which disallow probing, resulting in 0 confidence reported by the LP
|
|
23
|
+
const SNOWFLAKE_LIST = new Set([
|
|
24
|
+
"038f8f113c580048d847d6949371726653e02b928196bad310e3eda39ff61723f6",
|
|
25
|
+
"03a6ce61fcaacd38d31d4e3ce2d506602818e3856b4b44faff1dde9642ba705976"
|
|
26
|
+
]);
|
|
27
|
+
/**
|
|
28
|
+
* Escrow based (HTLC) swap for Smart chains -> Bitcoin lightning
|
|
29
|
+
*
|
|
30
|
+
* @category Swaps/Smart chain → Lightning
|
|
31
|
+
*/
|
|
32
|
+
class ToBTCLNSwap extends IToBTCSwap_1.IToBTCSwap {
|
|
33
|
+
/**
|
|
34
|
+
* Sets the LNURL data for the swap
|
|
35
|
+
*
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
_setLNURLData(lnurl, successAction) {
|
|
39
|
+
this.lnurl = lnurl;
|
|
40
|
+
this.successAction = successAction;
|
|
41
|
+
}
|
|
42
|
+
constructor(wrapper, initOrObj) {
|
|
43
|
+
if (isToBTCLNSwapInit(initOrObj) && initOrObj.url != null)
|
|
44
|
+
initOrObj.url += "/tobtcln";
|
|
45
|
+
super(wrapper, initOrObj);
|
|
46
|
+
this.TYPE = SwapType_1.SwapType.TO_BTCLN;
|
|
47
|
+
/**
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
this.outputToken = Token_1.BitcoinTokens.BTCLN;
|
|
51
|
+
if (isToBTCLNSwapInit(initOrObj)) {
|
|
52
|
+
this.confidence = initOrObj.confidence;
|
|
53
|
+
this.pr = initOrObj.pr;
|
|
54
|
+
this.lnurl = initOrObj.lnurl;
|
|
55
|
+
this.successAction = initOrObj.successAction;
|
|
56
|
+
this.usesClaimHashAsId = true;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
this.confidence = initOrObj.confidence;
|
|
60
|
+
this.pr = initOrObj.pr;
|
|
61
|
+
this.lnurl = initOrObj.lnurl;
|
|
62
|
+
this.successAction = initOrObj.successAction;
|
|
63
|
+
this.secret = initOrObj.secret;
|
|
64
|
+
this.usesClaimHashAsId = initOrObj.usesClaimHashAsId ?? false;
|
|
65
|
+
}
|
|
66
|
+
this.logger = (0, Logger_1.getLogger)("ToBTCLN(" + this.getIdentifierHashString() + "): ");
|
|
67
|
+
this.tryRecomputeSwapPrice();
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* @inheritDoc
|
|
71
|
+
* @internal
|
|
72
|
+
*/
|
|
73
|
+
_setPaymentResult(result, check = false) {
|
|
74
|
+
if (result == null)
|
|
75
|
+
return Promise.resolve(false);
|
|
76
|
+
if (result.secret == null)
|
|
77
|
+
throw new IntermediaryError_1.IntermediaryError("No payment secret returned!");
|
|
78
|
+
const secretBuffer = buffer_1.Buffer.from(result.secret, "hex");
|
|
79
|
+
const hash = buffer_1.Buffer.from((0, sha2_1.sha256)(secretBuffer));
|
|
80
|
+
if (check) {
|
|
81
|
+
const claimHash = this.wrapper._contract.getHashForHtlc(hash);
|
|
82
|
+
const expectedClaimHash = buffer_1.Buffer.from(this.getClaimHash(), "hex");
|
|
83
|
+
if (!claimHash.equals(expectedClaimHash))
|
|
84
|
+
throw new IntermediaryError_1.IntermediaryError("Invalid payment secret returned");
|
|
85
|
+
}
|
|
86
|
+
this.pr ??= hash.toString("hex");
|
|
87
|
+
this.secret = result.secret;
|
|
88
|
+
return Promise.resolve(true);
|
|
89
|
+
}
|
|
90
|
+
//////////////////////////////
|
|
91
|
+
//// Amounts & fees
|
|
92
|
+
/**
|
|
93
|
+
* @inheritDoc
|
|
94
|
+
*/
|
|
95
|
+
getOutputToken() {
|
|
96
|
+
return Token_1.BitcoinTokens.BTCLN;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* @inheritDoc
|
|
100
|
+
*/
|
|
101
|
+
getOutput() {
|
|
102
|
+
if (this.pr == null || !this.pr.toLowerCase().startsWith("ln"))
|
|
103
|
+
return (0, TokenAmount_1.toTokenAmount)(null, this.outputToken, this.wrapper._prices, this.pricingInfo);
|
|
104
|
+
const parsedPR = (0, bolt11_1.decode)(this.pr);
|
|
105
|
+
if (parsedPR.millisatoshis == null)
|
|
106
|
+
throw new Error("Swap invoice has no msat amount field!");
|
|
107
|
+
const amount = (BigInt(parsedPR.millisatoshis) + 999n) / 1000n;
|
|
108
|
+
return (0, TokenAmount_1.toTokenAmount)(amount, this.outputToken, this.wrapper._prices, this.pricingInfo);
|
|
109
|
+
}
|
|
110
|
+
//////////////////////////////
|
|
111
|
+
//// Getters & utils
|
|
112
|
+
/**
|
|
113
|
+
* @inheritDoc
|
|
114
|
+
*/
|
|
115
|
+
getOutputTxId() {
|
|
116
|
+
const paymentHash = this.getPaymentHash();
|
|
117
|
+
if (paymentHash == null)
|
|
118
|
+
return null;
|
|
119
|
+
return paymentHash.toString("hex");
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* @inheritDoc
|
|
123
|
+
*/
|
|
124
|
+
getOutputAddress() {
|
|
125
|
+
return this.lnurl ?? this.pr ?? null;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Returns payment secret (pre-image) as a proof of payment
|
|
129
|
+
*/
|
|
130
|
+
getSecret() {
|
|
131
|
+
return this.secret ?? null;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Returns the confidence of the intermediary that this payment will succeed.
|
|
135
|
+
*
|
|
136
|
+
* @returns Decimal value between 0 and 1, where 0 is not likely and 1 is very likely
|
|
137
|
+
*/
|
|
138
|
+
getConfidence() {
|
|
139
|
+
return this.confidence;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Checks whether a swap is likely to fail, based on the confidence as reported by the intermediary (LP)
|
|
143
|
+
*/
|
|
144
|
+
willLikelyFail() {
|
|
145
|
+
if (this.pr == null || !this.pr.toLowerCase().startsWith("ln"))
|
|
146
|
+
return false;
|
|
147
|
+
const parsedRequest = (0, bolt11_1.decode)(this.pr);
|
|
148
|
+
if (parsedRequest.tagsObject.routing_info != null) {
|
|
149
|
+
for (let route of parsedRequest.tagsObject.routing_info) {
|
|
150
|
+
if (SNOWFLAKE_LIST.has(route.pubkey)) {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return this.confidence === 0;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Tries to detect if the target lightning invoice is a non-custodial mobile wallet, extract care must be taken
|
|
159
|
+
* for such a wallet **to be online** when attempting to make a swap sending to such a wallet
|
|
160
|
+
*/
|
|
161
|
+
isPayingToNonCustodialWallet() {
|
|
162
|
+
if (this.pr == null || !this.pr.toLowerCase().startsWith("ln"))
|
|
163
|
+
return false;
|
|
164
|
+
const parsedRequest = (0, bolt11_1.decode)(this.pr);
|
|
165
|
+
if (parsedRequest.tagsObject.routing_info != null) {
|
|
166
|
+
return parsedRequest.tagsObject.routing_info.length > 0;
|
|
167
|
+
}
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* @inheritDoc
|
|
172
|
+
* @internal
|
|
173
|
+
*/
|
|
174
|
+
getIdentifierHash() {
|
|
175
|
+
const idBuffer = this.usesClaimHashAsId
|
|
176
|
+
? buffer_1.Buffer.from(this.getClaimHash(), "hex")
|
|
177
|
+
: this.getPaymentHash();
|
|
178
|
+
if (this._randomNonce == null)
|
|
179
|
+
return idBuffer;
|
|
180
|
+
return buffer_1.Buffer.concat([idBuffer, buffer_1.Buffer.from(this._randomNonce, "hex")]);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* @inheritDoc
|
|
184
|
+
* @internal
|
|
185
|
+
*/
|
|
186
|
+
getLpIdentifier() {
|
|
187
|
+
if (this.pr == null)
|
|
188
|
+
return this._data.getEscrowHash();
|
|
189
|
+
if (this.pr.toLowerCase().startsWith("ln")) {
|
|
190
|
+
const parsed = (0, bolt11_1.decode)(this.pr);
|
|
191
|
+
if (parsed.tagsObject.payment_hash == null)
|
|
192
|
+
throw new Error("Swap invoice has no payment hash field!");
|
|
193
|
+
return parsed.tagsObject.payment_hash;
|
|
194
|
+
}
|
|
195
|
+
return this.pr;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Returns the payment hash of the swap, i.e. a payment hash of the lightning network invoice that
|
|
199
|
+
* is about to be paid
|
|
200
|
+
*/
|
|
201
|
+
getPaymentHash() {
|
|
202
|
+
if (this.pr == null)
|
|
203
|
+
return null;
|
|
204
|
+
if (this.pr.toLowerCase().startsWith("ln")) {
|
|
205
|
+
const parsed = (0, bolt11_1.decode)(this.pr);
|
|
206
|
+
if (parsed.tagsObject.payment_hash == null)
|
|
207
|
+
throw new Error("Swap invoice has no payment hash field!");
|
|
208
|
+
return buffer_1.Buffer.from(parsed.tagsObject.payment_hash, "hex");
|
|
209
|
+
}
|
|
210
|
+
return buffer_1.Buffer.from(this.pr, "hex");
|
|
211
|
+
}
|
|
212
|
+
//////////////////////////////
|
|
213
|
+
//// LNURL-pay
|
|
214
|
+
/**
|
|
215
|
+
* Whether this is an LNURL-pay swap
|
|
216
|
+
*/
|
|
217
|
+
isLNURL() {
|
|
218
|
+
return this.lnurl != null;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Gets the used LNURL-pay link or `null` if this is not an LNURL-pay swap
|
|
222
|
+
*/
|
|
223
|
+
getLNURL() {
|
|
224
|
+
return this.lnurl ?? null;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Checks whether this LNURL-pay payment contains a success action
|
|
228
|
+
*/
|
|
229
|
+
hasSuccessAction() {
|
|
230
|
+
return this.successAction != null;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Returns the success action after a successful payment, else `null`
|
|
234
|
+
*/
|
|
235
|
+
getSuccessAction() {
|
|
236
|
+
return LNURL_1.LNURL.decodeSuccessAction(this.successAction, this.secret);
|
|
237
|
+
}
|
|
238
|
+
//////////////////////////////
|
|
239
|
+
//// Storage
|
|
240
|
+
/**
|
|
241
|
+
* @inheritDoc
|
|
242
|
+
*/
|
|
243
|
+
serialize() {
|
|
244
|
+
return {
|
|
245
|
+
...super.serialize(),
|
|
246
|
+
paymentHash: this.getPaymentHash()?.toString("hex"),
|
|
247
|
+
pr: this.pr,
|
|
248
|
+
confidence: this.confidence,
|
|
249
|
+
secret: this.secret,
|
|
250
|
+
lnurl: this.lnurl,
|
|
251
|
+
successAction: this.successAction,
|
|
252
|
+
usesClaimHashAsId: this.usesClaimHashAsId
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
exports.ToBTCLNSwap = ToBTCLNSwap;
|