@atomiqlabs/lp-lib 12.1.0 → 13.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +18 -13
- package/dist/index.js +18 -13
- package/dist/plugins/IPlugin.d.ts +35 -12
- package/dist/plugins/PluginManager.d.ts +38 -15
- package/dist/plugins/PluginManager.js +33 -9
- package/dist/prices/BinanceSwapPrice.d.ts +1 -1
- package/dist/prices/BinanceSwapPrice.js +1 -1
- package/dist/prices/CoinGeckoSwapPrice.d.ts +1 -1
- package/dist/prices/CoinGeckoSwapPrice.js +1 -1
- package/dist/{swaps → prices}/ISwapPrice.js +4 -0
- package/dist/prices/OKXSwapPrice.d.ts +1 -1
- package/dist/prices/OKXSwapPrice.js +1 -1
- package/dist/swaps/SwapHandler.d.ts +20 -58
- package/dist/swaps/SwapHandler.js +17 -186
- package/dist/swaps/SwapHandlerSwap.d.ts +8 -23
- package/dist/swaps/SwapHandlerSwap.js +7 -39
- package/dist/swaps/assertions/AmountAssertions.d.ts +28 -0
- package/dist/swaps/assertions/AmountAssertions.js +72 -0
- package/dist/swaps/assertions/FromBtcAmountAssertions.d.ts +76 -0
- package/dist/swaps/assertions/FromBtcAmountAssertions.js +162 -0
- package/dist/swaps/assertions/LightningAssertions.d.ts +44 -0
- package/dist/swaps/assertions/LightningAssertions.js +86 -0
- package/dist/swaps/assertions/ToBtcAmountAssertions.d.ts +53 -0
- package/dist/swaps/{ToBtcBaseSwapHandler.js → assertions/ToBtcAmountAssertions.js} +20 -94
- package/dist/swaps/escrow/EscrowHandler.d.ts +51 -0
- package/dist/swaps/escrow/EscrowHandler.js +158 -0
- package/dist/swaps/escrow/EscrowHandlerSwap.d.ts +35 -0
- package/dist/swaps/escrow/EscrowHandlerSwap.js +69 -0
- package/dist/swaps/{FromBtcBaseSwap.d.ts → escrow/FromBtcBaseSwap.d.ts} +2 -3
- package/dist/swaps/{FromBtcBaseSwap.js → escrow/FromBtcBaseSwap.js} +4 -7
- package/dist/swaps/{FromBtcBaseSwapHandler.d.ts → escrow/FromBtcBaseSwapHandler.d.ts} +10 -49
- package/dist/swaps/{FromBtcBaseSwapHandler.js → escrow/FromBtcBaseSwapHandler.js} +16 -137
- package/dist/swaps/{ToBtcBaseSwap.d.ts → escrow/ToBtcBaseSwap.d.ts} +2 -2
- package/dist/swaps/{ToBtcBaseSwap.js → escrow/ToBtcBaseSwap.js} +4 -4
- package/dist/swaps/escrow/ToBtcBaseSwapHandler.d.ts +53 -0
- package/dist/swaps/escrow/ToBtcBaseSwapHandler.js +81 -0
- package/dist/swaps/{frombtc_abstract → escrow/frombtc_abstract}/FromBtcAbs.d.ts +4 -4
- package/dist/swaps/{frombtc_abstract → escrow/frombtc_abstract}/FromBtcAbs.js +15 -15
- package/dist/swaps/{frombtc_abstract → escrow/frombtc_abstract}/FromBtcSwapAbs.js +1 -1
- package/dist/swaps/{frombtcln_abstract → escrow/frombtcln_abstract}/FromBtcLnAbs.d.ts +9 -7
- package/dist/swaps/{frombtcln_abstract → escrow/frombtcln_abstract}/FromBtcLnAbs.js +22 -19
- package/dist/swaps/{frombtcln_abstract → escrow/frombtcln_abstract}/FromBtcLnSwapAbs.js +3 -3
- package/dist/swaps/{tobtc_abstract → escrow/tobtc_abstract}/ToBtcAbs.d.ts +4 -4
- package/dist/swaps/{tobtc_abstract → escrow/tobtc_abstract}/ToBtcAbs.js +14 -13
- package/dist/swaps/{tobtc_abstract → escrow/tobtc_abstract}/ToBtcSwapAbs.js +3 -3
- package/dist/swaps/{tobtcln_abstract → escrow/tobtcln_abstract}/ToBtcLnAbs.d.ts +6 -26
- package/dist/swaps/{tobtcln_abstract → escrow/tobtcln_abstract}/ToBtcLnAbs.js +20 -57
- package/dist/swaps/{tobtcln_abstract → escrow/tobtcln_abstract}/ToBtcLnSwapAbs.js +3 -3
- package/dist/swaps/spv_vault_swap/SpvVault.d.ts +41 -0
- package/dist/swaps/spv_vault_swap/SpvVault.js +111 -0
- package/dist/swaps/spv_vault_swap/SpvVaultSwap.d.ts +63 -0
- package/dist/swaps/spv_vault_swap/SpvVaultSwap.js +145 -0
- package/dist/swaps/spv_vault_swap/SpvVaultSwapHandler.d.ts +68 -0
- package/dist/swaps/spv_vault_swap/SpvVaultSwapHandler.js +469 -0
- package/dist/swaps/spv_vault_swap/SpvVaults.d.ts +57 -0
- package/dist/swaps/spv_vault_swap/SpvVaults.js +369 -0
- package/dist/swaps/{frombtc_trusted → trusted/frombtc_trusted}/FromBtcTrusted.d.ts +10 -13
- package/dist/swaps/{frombtc_trusted → trusted/frombtc_trusted}/FromBtcTrusted.js +25 -30
- package/dist/swaps/{frombtc_trusted → trusted/frombtc_trusted}/FromBtcTrustedSwap.d.ts +9 -4
- package/dist/swaps/{frombtc_trusted → trusted/frombtc_trusted}/FromBtcTrustedSwap.js +15 -7
- package/dist/swaps/{frombtcln_trusted → trusted/frombtcln_trusted}/FromBtcLnTrusted.d.ts +12 -14
- package/dist/swaps/{frombtcln_trusted → trusted/frombtcln_trusted}/FromBtcLnTrusted.js +33 -35
- package/dist/swaps/{frombtcln_trusted → trusted/frombtcln_trusted}/FromBtcLnTrustedSwap.d.ts +9 -4
- package/dist/swaps/{frombtcln_trusted → trusted/frombtcln_trusted}/FromBtcLnTrustedSwap.js +17 -7
- package/dist/utils/Utils.d.ts +13 -5
- package/dist/utils/Utils.js +23 -1
- package/dist/wallets/IBitcoinWallet.d.ts +6 -0
- package/dist/wallets/ISpvVaultSigner.d.ts +7 -0
- package/dist/wallets/ISpvVaultSigner.js +2 -0
- package/dist/wallets/ISpvVaultWallet.d.ts +42 -0
- package/dist/wallets/ISpvVaultWallet.js +2 -0
- package/package.json +2 -2
- package/src/index.ts +21 -15
- package/src/plugins/IPlugin.ts +27 -19
- package/src/plugins/PluginManager.ts +51 -26
- package/src/prices/BinanceSwapPrice.ts +1 -1
- package/src/prices/CoinGeckoSwapPrice.ts +1 -1
- package/src/{swaps → prices}/ISwapPrice.ts +4 -0
- package/src/prices/OKXSwapPrice.ts +1 -1
- package/src/swaps/SwapHandler.ts +22 -205
- package/src/swaps/SwapHandlerSwap.ts +10 -46
- package/src/swaps/assertions/AmountAssertions.ts +77 -0
- package/src/swaps/assertions/FromBtcAmountAssertions.ts +228 -0
- package/src/swaps/assertions/LightningAssertions.ts +103 -0
- package/src/swaps/{ToBtcBaseSwapHandler.ts → assertions/ToBtcAmountAssertions.ts} +27 -142
- package/src/swaps/escrow/EscrowHandler.ts +179 -0
- package/src/swaps/escrow/EscrowHandlerSwap.ts +87 -0
- package/src/swaps/{FromBtcBaseSwap.ts → escrow/FromBtcBaseSwap.ts} +4 -8
- package/src/swaps/{FromBtcBaseSwapHandler.ts → escrow/FromBtcBaseSwapHandler.ts} +30 -190
- package/src/swaps/{ToBtcBaseSwap.ts → escrow/ToBtcBaseSwap.ts} +4 -5
- package/src/swaps/escrow/ToBtcBaseSwapHandler.ts +130 -0
- package/src/swaps/{frombtc_abstract → escrow/frombtc_abstract}/FromBtcAbs.ts +20 -20
- package/src/swaps/{frombtc_abstract → escrow/frombtc_abstract}/FromBtcSwapAbs.ts +1 -1
- package/src/swaps/{frombtcln_abstract → escrow/frombtcln_abstract}/FromBtcLnAbs.ts +29 -25
- package/src/swaps/{frombtcln_abstract → escrow/frombtcln_abstract}/FromBtcLnSwapAbs.ts +2 -2
- package/src/swaps/{tobtc_abstract → escrow/tobtc_abstract}/ToBtcAbs.ts +19 -18
- package/src/swaps/{tobtc_abstract → escrow/tobtc_abstract}/ToBtcSwapAbs.ts +2 -2
- package/src/swaps/{tobtcln_abstract → escrow/tobtcln_abstract}/ToBtcLnAbs.ts +26 -66
- package/src/swaps/{tobtcln_abstract → escrow/tobtcln_abstract}/ToBtcLnSwapAbs.ts +2 -2
- package/src/swaps/spv_vault_swap/SpvVault.ts +143 -0
- package/src/swaps/spv_vault_swap/SpvVaultSwap.ts +207 -0
- package/src/swaps/spv_vault_swap/SpvVaultSwapHandler.ts +606 -0
- package/src/swaps/spv_vault_swap/SpvVaults.ts +441 -0
- package/src/swaps/{frombtc_trusted → trusted/frombtc_trusted}/FromBtcTrusted.ts +36 -51
- package/src/swaps/{frombtc_trusted → trusted/frombtc_trusted}/FromBtcTrustedSwap.ts +18 -8
- package/src/swaps/{frombtcln_trusted → trusted/frombtcln_trusted}/FromBtcLnTrusted.ts +43 -52
- package/src/swaps/{frombtcln_trusted → trusted/frombtcln_trusted}/FromBtcLnTrustedSwap.ts +20 -8
- package/src/utils/Utils.ts +27 -1
- package/src/wallets/IBitcoinWallet.ts +4 -0
- package/src/wallets/ISpvVaultSigner.ts +11 -0
- package/dist/swaps/FromBtcLnBaseSwapHandler.d.ts +0 -26
- package/dist/swaps/FromBtcLnBaseSwapHandler.js +0 -46
- package/dist/swaps/ToBtcBaseSwapHandler.d.ts +0 -95
- package/src/swaps/FromBtcLnBaseSwapHandler.ts +0 -63
- /package/dist/{swaps → prices}/ISwapPrice.d.ts +0 -0
- /package/dist/swaps/{frombtc_abstract → escrow/frombtc_abstract}/FromBtcSwapAbs.d.ts +0 -0
- /package/dist/swaps/{frombtcln_abstract → escrow/frombtcln_abstract}/FromBtcLnSwapAbs.d.ts +0 -0
- /package/dist/swaps/{tobtc_abstract → escrow/tobtc_abstract}/ToBtcSwapAbs.d.ts +0 -0
- /package/dist/swaps/{tobtcln_abstract → escrow/tobtcln_abstract}/ToBtcLnSwapAbs.d.ts +0 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ToBtcBaseSwapHandler = void 0;
|
|
4
|
+
const SchemaVerifier_1 = require("../../utils/paramcoders/SchemaVerifier");
|
|
5
|
+
const EscrowHandler_1 = require("./EscrowHandler");
|
|
6
|
+
const ToBtcAmountAssertions_1 = require("../assertions/ToBtcAmountAssertions");
|
|
7
|
+
class ToBtcBaseSwapHandler extends EscrowHandler_1.EscrowHandler {
|
|
8
|
+
constructor(storageDirectory, path, chainsData, swapPricing, config) {
|
|
9
|
+
super(storageDirectory, path, chainsData, swapPricing);
|
|
10
|
+
this.pdaExistsForToken = {};
|
|
11
|
+
this.AmountAssertions = new ToBtcAmountAssertions_1.ToBtcAmountAssertions(config, swapPricing);
|
|
12
|
+
}
|
|
13
|
+
async checkVaultInitialized(chainIdentifier, token) {
|
|
14
|
+
if (!this.pdaExistsForToken[chainIdentifier] || !this.pdaExistsForToken[chainIdentifier][token]) {
|
|
15
|
+
this.logger.debug("checkVaultInitialized(): checking vault exists for chain: " + chainIdentifier + " token: " + token);
|
|
16
|
+
const { swapContract, signer } = this.getChain(chainIdentifier);
|
|
17
|
+
const reputation = await swapContract.getIntermediaryReputation(signer.getAddress(), token);
|
|
18
|
+
this.logger.debug("checkVaultInitialized(): vault state, chain: " + chainIdentifier + " token: " + token + " exists: " + (reputation != null));
|
|
19
|
+
if (reputation != null) {
|
|
20
|
+
if (this.pdaExistsForToken[chainIdentifier] == null)
|
|
21
|
+
this.pdaExistsForToken[chainIdentifier] = {};
|
|
22
|
+
this.pdaExistsForToken[chainIdentifier][token] = true;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
throw {
|
|
26
|
+
code: 20201,
|
|
27
|
+
msg: "Token not supported!"
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Starts pre-fetches for swap pricing & signature data
|
|
34
|
+
*
|
|
35
|
+
* @param chainIdentifier
|
|
36
|
+
* @param token
|
|
37
|
+
* @param responseStream
|
|
38
|
+
* @param abortController
|
|
39
|
+
*/
|
|
40
|
+
getToBtcPrefetches(chainIdentifier, token, responseStream, abortController) {
|
|
41
|
+
//Fetch pricing & signature data in parallel
|
|
42
|
+
const pricePrefetchPromise = this.swapPricing.preFetchPrice(token, chainIdentifier).catch(e => {
|
|
43
|
+
this.logger.error("getToBtcPrefetches(): pricePrefetch error", e);
|
|
44
|
+
abortController.abort(e);
|
|
45
|
+
return null;
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
pricePrefetchPromise,
|
|
49
|
+
signDataPrefetchPromise: this.getSignDataPrefetch(chainIdentifier, abortController, responseStream)
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Signs the created swap
|
|
54
|
+
*
|
|
55
|
+
* @param chainIdentifier
|
|
56
|
+
* @param swapObject
|
|
57
|
+
* @param req
|
|
58
|
+
* @param abortSignal
|
|
59
|
+
* @param signDataPrefetchPromise
|
|
60
|
+
*/
|
|
61
|
+
async getToBtcSignatureData(chainIdentifier, swapObject, req, abortSignal, signDataPrefetchPromise) {
|
|
62
|
+
const prefetchedSignData = signDataPrefetchPromise != null ? await signDataPrefetchPromise : null;
|
|
63
|
+
if (prefetchedSignData != null)
|
|
64
|
+
this.logger.debug("getToBtcSignatureData(): pre-fetched signature data: ", prefetchedSignData);
|
|
65
|
+
abortSignal.throwIfAborted();
|
|
66
|
+
const feeRateObj = await req.paramReader.getParams({
|
|
67
|
+
feeRate: SchemaVerifier_1.FieldTypeEnum.String
|
|
68
|
+
}).catch(() => null);
|
|
69
|
+
abortSignal.throwIfAborted();
|
|
70
|
+
const feeRate = feeRateObj?.feeRate != null && typeof (feeRateObj.feeRate) === "string" ? feeRateObj.feeRate : null;
|
|
71
|
+
this.logger.debug("getToBtcSignatureData(): using fee rate from client: ", feeRate);
|
|
72
|
+
const { swapContract, signer } = this.getChain(chainIdentifier);
|
|
73
|
+
const sigData = await swapContract.getInitSignature(signer, swapObject, this.getInitAuthorizationTimeout(chainIdentifier), prefetchedSignData, feeRate);
|
|
74
|
+
abortSignal.throwIfAborted();
|
|
75
|
+
return {
|
|
76
|
+
...sigData,
|
|
77
|
+
feeRate
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.ToBtcBaseSwapHandler = ToBtcBaseSwapHandler;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Express } from "express";
|
|
2
2
|
import { FromBtcSwapAbs, FromBtcSwapState } from "./FromBtcSwapAbs";
|
|
3
|
-
import { MultichainData, SwapHandlerType } from "
|
|
4
|
-
import { ISwapPrice } from "
|
|
3
|
+
import { MultichainData, SwapHandlerType } from "../../SwapHandler";
|
|
4
|
+
import { ISwapPrice } from "../../../prices/ISwapPrice";
|
|
5
5
|
import { ChainSwapType, ClaimEvent, InitializeEvent, RefundEvent, SwapData } from "@atomiqlabs/base";
|
|
6
|
-
import { IIntermediaryStorage } from "
|
|
6
|
+
import { IIntermediaryStorage } from "../../../storage/IIntermediaryStorage";
|
|
7
7
|
import { FromBtcBaseConfig, FromBtcBaseSwapHandler } from "../FromBtcBaseSwapHandler";
|
|
8
|
-
import { IBitcoinWallet } from "
|
|
8
|
+
import { IBitcoinWallet } from "../../../wallets/IBitcoinWallet";
|
|
9
9
|
export type FromBtcConfig = FromBtcBaseConfig & {
|
|
10
10
|
confirmations: number;
|
|
11
11
|
swapCsvDelta: number;
|
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FromBtcAbs = void 0;
|
|
4
4
|
const FromBtcSwapAbs_1 = require("./FromBtcSwapAbs");
|
|
5
|
-
const SwapHandler_1 = require("
|
|
5
|
+
const SwapHandler_1 = require("../../SwapHandler");
|
|
6
6
|
const base_1 = require("@atomiqlabs/base");
|
|
7
7
|
const crypto_1 = require("crypto");
|
|
8
|
-
const Utils_1 = require("
|
|
9
|
-
const PluginManager_1 = require("
|
|
10
|
-
const SchemaVerifier_1 = require("
|
|
11
|
-
const ServerParamDecoder_1 = require("
|
|
8
|
+
const Utils_1 = require("../../../utils/Utils");
|
|
9
|
+
const PluginManager_1 = require("../../../plugins/PluginManager");
|
|
10
|
+
const SchemaVerifier_1 = require("../../../utils/paramcoders/SchemaVerifier");
|
|
11
|
+
const ServerParamDecoder_1 = require("../../../utils/paramcoders/server/ServerParamDecoder");
|
|
12
12
|
const FromBtcBaseSwapHandler_1 = require("../FromBtcBaseSwapHandler");
|
|
13
13
|
/**
|
|
14
14
|
* Swap handler handling from BTC swaps using PTLCs (proof-time locked contracts) and btc relay (on-chain bitcoin SPV)
|
|
15
15
|
*/
|
|
16
16
|
class FromBtcAbs extends FromBtcBaseSwapHandler_1.FromBtcBaseSwapHandler {
|
|
17
17
|
constructor(storageDirectory, path, chains, bitcoin, swapPricing, config) {
|
|
18
|
-
super(storageDirectory, path, chains, swapPricing);
|
|
18
|
+
super(storageDirectory, path, chains, swapPricing, config);
|
|
19
19
|
this.type = SwapHandler_1.SwapHandlerType.FROM_BTC;
|
|
20
20
|
this.swapType = base_1.ChainSwapType.CHAIN;
|
|
21
21
|
this.bitcoin = bitcoin;
|
|
@@ -57,8 +57,8 @@ class FromBtcAbs extends FromBtcBaseSwapHandler_1.FromBtcBaseSwapHandler {
|
|
|
57
57
|
return false;
|
|
58
58
|
}
|
|
59
59
|
this.swapLogger.info(swap, "processPastSwap(state=CREATED): removing past swap due to authorization expiry, address: " + swap.address);
|
|
60
|
-
await this.bitcoin.addUnusedAddress(swap.address);
|
|
61
60
|
await this.removeSwapData(swap, FromBtcSwapAbs_1.FromBtcSwapState.CANCELED);
|
|
61
|
+
await this.bitcoin.addUnusedAddress(swap.address);
|
|
62
62
|
return false;
|
|
63
63
|
}
|
|
64
64
|
//Check if commited swap expired by now
|
|
@@ -130,8 +130,8 @@ class FromBtcAbs extends FromBtcBaseSwapHandler_1.FromBtcBaseSwapHandler {
|
|
|
130
130
|
async processRefundEvent(chainIdentifier, savedSwap, event) {
|
|
131
131
|
savedSwap.txIds.refund = event.meta?.txId;
|
|
132
132
|
this.swapLogger.info(event, "SC: RefundEvent: swap refunded, address: " + savedSwap.address);
|
|
133
|
-
await this.bitcoin.addUnusedAddress(savedSwap.address);
|
|
134
133
|
await this.removeSwapData(savedSwap, FromBtcSwapAbs_1.FromBtcSwapState.REFUNDED);
|
|
134
|
+
await this.bitcoin.addUnusedAddress(savedSwap.address);
|
|
135
135
|
}
|
|
136
136
|
/**
|
|
137
137
|
* Calculates the requested claimer bounty, based on client's request
|
|
@@ -179,8 +179,8 @@ class FromBtcAbs extends FromBtcBaseSwapHandler_1.FromBtcBaseSwapHandler {
|
|
|
179
179
|
restServer.post(this.path + "/getAddress", (0, Utils_1.expressHandlerWrapper)(async (req, res) => {
|
|
180
180
|
const metadata = { request: {}, times: {} };
|
|
181
181
|
const chainIdentifier = req.query.chain ?? this.chains.default;
|
|
182
|
-
const { swapContract, signer } = this.getChain(chainIdentifier);
|
|
183
|
-
const depositToken = req.query.depositToken ??
|
|
182
|
+
const { swapContract, signer, chainInterface } = this.getChain(chainIdentifier);
|
|
183
|
+
const depositToken = req.query.depositToken ?? chainInterface.getNativeCurrencyAddress();
|
|
184
184
|
this.checkAllowedDepositToken(chainIdentifier, depositToken);
|
|
185
185
|
metadata.times.requestReceived = Date.now();
|
|
186
186
|
/**
|
|
@@ -202,7 +202,7 @@ class FromBtcAbs extends FromBtcBaseSwapHandler_1.FromBtcBaseSwapHandler {
|
|
|
202
202
|
const parsedBody = await req.paramReader.getParams({
|
|
203
203
|
address: (val) => val != null &&
|
|
204
204
|
typeof (val) === "string" &&
|
|
205
|
-
|
|
205
|
+
chainInterface.isValidAddress(val) ? val : null,
|
|
206
206
|
amount: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
207
207
|
token: (val) => val != null &&
|
|
208
208
|
typeof (val) === "string" &&
|
|
@@ -216,7 +216,7 @@ class FromBtcAbs extends FromBtcBaseSwapHandler_1.FromBtcBaseSwapHandler {
|
|
|
216
216
|
msg: "Invalid request body"
|
|
217
217
|
};
|
|
218
218
|
metadata.request = parsedBody;
|
|
219
|
-
const requestedAmount = { input: !parsedBody.exactOut, amount: parsedBody.amount };
|
|
219
|
+
const requestedAmount = { input: !parsedBody.exactOut, amount: parsedBody.amount, token: parsedBody.token };
|
|
220
220
|
const request = {
|
|
221
221
|
chainIdentifier,
|
|
222
222
|
raw: req,
|
|
@@ -226,11 +226,11 @@ class FromBtcAbs extends FromBtcBaseSwapHandler_1.FromBtcBaseSwapHandler {
|
|
|
226
226
|
const useToken = parsedBody.token;
|
|
227
227
|
//Check request params
|
|
228
228
|
this.checkSequence(parsedBody.sequence);
|
|
229
|
-
const fees = await this.
|
|
229
|
+
const fees = await this.AmountAssertions.preCheckFromBtcAmounts(this.type, request, requestedAmount);
|
|
230
230
|
metadata.times.requestChecked = Date.now();
|
|
231
231
|
//Create abortController for parallel prefetches
|
|
232
232
|
const responseStream = res.responseStream;
|
|
233
|
-
const abortController =
|
|
233
|
+
const abortController = (0, Utils_1.getAbortController)(responseStream);
|
|
234
234
|
//Pre-fetch data
|
|
235
235
|
const { pricePrefetchPromise, gasTokenPricePrefetchPromise, depositTokenPricePrefetchPromise } = this.getFromBtcPricePrefetches(chainIdentifier, useToken, depositToken, abortController);
|
|
236
236
|
const balancePrefetch = this.getBalancePrefetch(chainIdentifier, useToken, abortController);
|
|
@@ -239,7 +239,7 @@ class FromBtcAbs extends FromBtcBaseSwapHandler_1.FromBtcBaseSwapHandler {
|
|
|
239
239
|
abortController.signal.throwIfAborted();
|
|
240
240
|
const baseSDPromise = this.getBaseSecurityDepositPrefetch(chainIdentifier, dummySwapData, depositToken, gasTokenPricePrefetchPromise, depositTokenPricePrefetchPromise, abortController);
|
|
241
241
|
//Check valid amount specified (min/max)
|
|
242
|
-
const { amountBD, swapFee, swapFeeInToken, totalInToken, securityDepositApyPPM, securityDepositBaseMultiplierPPM } = await this.checkFromBtcAmount(request, requestedAmount,
|
|
242
|
+
const { amountBD, swapFee, swapFeeInToken, totalInToken, securityDepositApyPPM, securityDepositBaseMultiplierPPM } = await this.AmountAssertions.checkFromBtcAmount(this.type, request, { ...requestedAmount, pricePrefetch: pricePrefetchPromise }, fees, abortController.signal);
|
|
243
243
|
metadata.times.priceCalculated = Date.now();
|
|
244
244
|
if (securityDepositApyPPM != null)
|
|
245
245
|
fees.securityDepositApyPPM = securityDepositApyPPM;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FromBtcSwapAbs = exports.FromBtcSwapState = void 0;
|
|
4
|
-
const SwapHandler_1 = require("
|
|
4
|
+
const SwapHandler_1 = require("../../SwapHandler");
|
|
5
5
|
const FromBtcBaseSwap_1 = require("../FromBtcBaseSwap");
|
|
6
6
|
var FromBtcSwapState;
|
|
7
7
|
(function (FromBtcSwapState) {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Express } from "express";
|
|
2
2
|
import { FromBtcLnSwapAbs, FromBtcLnSwapState } from "./FromBtcLnSwapAbs";
|
|
3
|
-
import { MultichainData, SwapHandlerType } from "
|
|
4
|
-
import { ISwapPrice } from "
|
|
3
|
+
import { MultichainData, SwapHandlerType } from "../../SwapHandler";
|
|
4
|
+
import { ISwapPrice } from "../../../prices/ISwapPrice";
|
|
5
5
|
import { ChainSwapType, ClaimEvent, InitializeEvent, RefundEvent, SwapData } from "@atomiqlabs/base";
|
|
6
|
-
import { IIntermediaryStorage } from "
|
|
7
|
-
import { FromBtcBaseConfig } from "../FromBtcBaseSwapHandler";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
6
|
+
import { IIntermediaryStorage } from "../../../storage/IIntermediaryStorage";
|
|
7
|
+
import { FromBtcBaseConfig, FromBtcBaseSwapHandler } from "../FromBtcBaseSwapHandler";
|
|
8
|
+
import { ILightningWallet } from "../../../wallets/ILightningWallet";
|
|
9
|
+
import { LightningAssertions } from "../../assertions/LightningAssertions";
|
|
10
10
|
export type FromBtcLnConfig = FromBtcBaseConfig & {
|
|
11
11
|
invoiceTimeoutSeconds?: number;
|
|
12
12
|
minCltv: bigint;
|
|
@@ -23,10 +23,12 @@ export type FromBtcLnRequestType = {
|
|
|
23
23
|
/**
|
|
24
24
|
* Swap handler handling from BTCLN swaps using submarine swaps
|
|
25
25
|
*/
|
|
26
|
-
export declare class FromBtcLnAbs extends
|
|
26
|
+
export declare class FromBtcLnAbs extends FromBtcBaseSwapHandler<FromBtcLnSwapAbs, FromBtcLnSwapState> {
|
|
27
27
|
readonly type = SwapHandlerType.FROM_BTCLN;
|
|
28
28
|
readonly swapType = ChainSwapType.HTLC;
|
|
29
29
|
readonly config: FromBtcLnConfig;
|
|
30
|
+
readonly lightning: ILightningWallet;
|
|
31
|
+
readonly LightningAssertions: LightningAssertions;
|
|
30
32
|
constructor(storageDirectory: IIntermediaryStorage<FromBtcLnSwapAbs>, path: string, chains: MultichainData, lightning: ILightningWallet, swapPricing: ISwapPrice, config: FromBtcLnConfig);
|
|
31
33
|
protected processPastSwap(swap: FromBtcLnSwapAbs): Promise<"REFUND" | "SETTLE" | "CANCEL" | null>;
|
|
32
34
|
protected refundSwaps(refundSwaps: FromBtcLnSwapAbs[]): Promise<void>;
|
|
@@ -3,23 +3,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.FromBtcLnAbs = void 0;
|
|
4
4
|
const crypto_1 = require("crypto");
|
|
5
5
|
const FromBtcLnSwapAbs_1 = require("./FromBtcLnSwapAbs");
|
|
6
|
-
const SwapHandler_1 = require("
|
|
6
|
+
const SwapHandler_1 = require("../../SwapHandler");
|
|
7
7
|
const base_1 = require("@atomiqlabs/base");
|
|
8
|
-
const Utils_1 = require("
|
|
9
|
-
const PluginManager_1 = require("
|
|
10
|
-
const SchemaVerifier_1 = require("
|
|
11
|
-
const ServerParamDecoder_1 = require("
|
|
12
|
-
const
|
|
8
|
+
const Utils_1 = require("../../../utils/Utils");
|
|
9
|
+
const PluginManager_1 = require("../../../plugins/PluginManager");
|
|
10
|
+
const SchemaVerifier_1 = require("../../../utils/paramcoders/SchemaVerifier");
|
|
11
|
+
const ServerParamDecoder_1 = require("../../../utils/paramcoders/server/ServerParamDecoder");
|
|
12
|
+
const FromBtcBaseSwapHandler_1 = require("../FromBtcBaseSwapHandler");
|
|
13
|
+
const LightningAssertions_1 = require("../../assertions/LightningAssertions");
|
|
13
14
|
/**
|
|
14
15
|
* Swap handler handling from BTCLN swaps using submarine swaps
|
|
15
16
|
*/
|
|
16
|
-
class FromBtcLnAbs extends
|
|
17
|
+
class FromBtcLnAbs extends FromBtcBaseSwapHandler_1.FromBtcBaseSwapHandler {
|
|
17
18
|
constructor(storageDirectory, path, chains, lightning, swapPricing, config) {
|
|
18
|
-
super(storageDirectory, path, chains,
|
|
19
|
+
super(storageDirectory, path, chains, swapPricing, config);
|
|
19
20
|
this.type = SwapHandler_1.SwapHandlerType.FROM_BTCLN;
|
|
20
21
|
this.swapType = base_1.ChainSwapType.HTLC;
|
|
21
22
|
this.config = config;
|
|
22
23
|
this.config.invoiceTimeoutSeconds = this.config.invoiceTimeoutSeconds || 90;
|
|
24
|
+
this.lightning = lightning;
|
|
25
|
+
this.LightningAssertions = new LightningAssertions_1.LightningAssertions(this.logger, lightning);
|
|
23
26
|
}
|
|
24
27
|
async processPastSwap(swap) {
|
|
25
28
|
const { swapContract, signer } = this.getChain(swap.chainIdentifier);
|
|
@@ -392,8 +395,8 @@ class FromBtcLnAbs extends FromBtcLnBaseSwapHandler_1.FromBtcLnBaseSwapHandler {
|
|
|
392
395
|
chainIdentifier = this.chains.default;
|
|
393
396
|
address = invoice.description;
|
|
394
397
|
}
|
|
395
|
-
const {
|
|
396
|
-
if (!
|
|
398
|
+
const { chainInterface } = this.getChain(chainIdentifier);
|
|
399
|
+
if (!chainInterface.isValidAddress(address))
|
|
397
400
|
throw {
|
|
398
401
|
_httpStatus: 200,
|
|
399
402
|
code: 10001,
|
|
@@ -427,8 +430,8 @@ class FromBtcLnAbs extends FromBtcLnBaseSwapHandler_1.FromBtcLnBaseSwapHandler {
|
|
|
427
430
|
restServer.post(this.path + "/createInvoice", (0, Utils_1.expressHandlerWrapper)(async (req, res) => {
|
|
428
431
|
const metadata = { request: {}, times: {} };
|
|
429
432
|
const chainIdentifier = req.query.chain ?? this.chains.default;
|
|
430
|
-
const { swapContract, signer } = this.getChain(chainIdentifier);
|
|
431
|
-
const depositToken = req.query.depositToken ??
|
|
433
|
+
const { swapContract, signer, chainInterface } = this.getChain(chainIdentifier);
|
|
434
|
+
const depositToken = req.query.depositToken ?? chainInterface.getNativeCurrencyAddress();
|
|
432
435
|
this.checkAllowedDepositToken(chainIdentifier, depositToken);
|
|
433
436
|
metadata.times.requestReceived = Date.now();
|
|
434
437
|
/**
|
|
@@ -445,7 +448,7 @@ class FromBtcLnAbs extends FromBtcLnBaseSwapHandler_1.FromBtcLnBaseSwapHandler {
|
|
|
445
448
|
const parsedBody = await req.paramReader.getParams({
|
|
446
449
|
address: (val) => val != null &&
|
|
447
450
|
typeof (val) === "string" &&
|
|
448
|
-
|
|
451
|
+
chainInterface.isValidAddress(val) ? val : null,
|
|
449
452
|
paymentHash: (val) => val != null &&
|
|
450
453
|
typeof (val) === "string" &&
|
|
451
454
|
val.length === 64 &&
|
|
@@ -463,7 +466,7 @@ class FromBtcLnAbs extends FromBtcLnBaseSwapHandler_1.FromBtcLnBaseSwapHandler {
|
|
|
463
466
|
msg: "Invalid request body"
|
|
464
467
|
};
|
|
465
468
|
metadata.request = parsedBody;
|
|
466
|
-
const requestedAmount = { input: !parsedBody.exactOut, amount: parsedBody.amount };
|
|
469
|
+
const requestedAmount = { input: !parsedBody.exactOut, amount: parsedBody.amount, token: parsedBody.token };
|
|
467
470
|
const request = {
|
|
468
471
|
chainIdentifier,
|
|
469
472
|
raw: req,
|
|
@@ -473,22 +476,22 @@ class FromBtcLnAbs extends FromBtcLnBaseSwapHandler_1.FromBtcLnBaseSwapHandler {
|
|
|
473
476
|
const useToken = parsedBody.token;
|
|
474
477
|
//Check request params
|
|
475
478
|
this.checkDescriptionHash(parsedBody.descriptionHash);
|
|
476
|
-
const fees = await this.
|
|
479
|
+
const fees = await this.AmountAssertions.preCheckFromBtcAmounts(this.type, request, requestedAmount);
|
|
477
480
|
metadata.times.requestChecked = Date.now();
|
|
478
481
|
//Create abortController for parallel prefetches
|
|
479
482
|
const responseStream = res.responseStream;
|
|
480
|
-
const abortController =
|
|
483
|
+
const abortController = (0, Utils_1.getAbortController)(responseStream);
|
|
481
484
|
//Pre-fetch data
|
|
482
485
|
const { pricePrefetchPromise, gasTokenPricePrefetchPromise, depositTokenPricePrefetchPromise } = this.getFromBtcPricePrefetches(chainIdentifier, useToken, depositToken, abortController);
|
|
483
486
|
const balancePrefetch = this.getBalancePrefetch(chainIdentifier, useToken, abortController);
|
|
484
|
-
const channelsPrefetch = this.getChannelsPrefetch(abortController);
|
|
487
|
+
const channelsPrefetch = this.LightningAssertions.getChannelsPrefetch(abortController);
|
|
485
488
|
const dummySwapData = await this.getDummySwapData(chainIdentifier, useToken, parsedBody.address, parsedBody.paymentHash);
|
|
486
489
|
abortController.signal.throwIfAborted();
|
|
487
490
|
const baseSDPromise = this.getBaseSecurityDepositPrefetch(chainIdentifier, dummySwapData, depositToken, gasTokenPricePrefetchPromise, depositTokenPricePrefetchPromise, abortController);
|
|
488
491
|
//Asynchronously send the node's public key to the client
|
|
489
492
|
this.sendPublicKeyAsync(responseStream);
|
|
490
493
|
//Check valid amount specified (min/max)
|
|
491
|
-
const { amountBD, swapFee, swapFeeInToken, totalInToken, securityDepositApyPPM, securityDepositBaseMultiplierPPM } = await this.checkFromBtcAmount(request, requestedAmount,
|
|
494
|
+
const { amountBD, swapFee, swapFeeInToken, totalInToken, securityDepositApyPPM, securityDepositBaseMultiplierPPM } = await this.AmountAssertions.checkFromBtcAmount(this.type, request, { ...requestedAmount, pricePrefetch: pricePrefetchPromise }, fees, abortController.signal);
|
|
492
495
|
metadata.times.priceCalculated = Date.now();
|
|
493
496
|
if (securityDepositApyPPM != null)
|
|
494
497
|
fees.securityDepositApyPPM = securityDepositApyPPM;
|
|
@@ -496,7 +499,7 @@ class FromBtcLnAbs extends FromBtcLnBaseSwapHandler_1.FromBtcLnBaseSwapHandler {
|
|
|
496
499
|
fees.securityDepositBaseMultiplierPPM = securityDepositBaseMultiplierPPM;
|
|
497
500
|
//Check if we have enough funds to honor the request
|
|
498
501
|
await this.checkBalance(totalInToken, balancePrefetch, abortController.signal);
|
|
499
|
-
await this.checkInboundLiquidity(amountBD, channelsPrefetch, abortController.signal);
|
|
502
|
+
await this.LightningAssertions.checkInboundLiquidity(amountBD, channelsPrefetch, abortController.signal);
|
|
500
503
|
metadata.times.balanceChecked = Date.now();
|
|
501
504
|
//Create swap
|
|
502
505
|
const hodlInvoiceObj = {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FromBtcLnSwapAbs = exports.FromBtcLnSwapState = void 0;
|
|
4
|
-
const
|
|
4
|
+
const index_1 = require("../../../index");
|
|
5
5
|
const FromBtcBaseSwap_1 = require("../FromBtcBaseSwap");
|
|
6
|
-
const Utils_1 = require("
|
|
6
|
+
const Utils_1 = require("../../../utils/Utils");
|
|
7
7
|
var FromBtcLnSwapState;
|
|
8
8
|
(function (FromBtcLnSwapState) {
|
|
9
9
|
FromBtcLnSwapState[FromBtcLnSwapState["REFUNDED"] = -2] = "REFUNDED";
|
|
@@ -48,7 +48,7 @@ class FromBtcLnSwapAbs extends FromBtcBaseSwap_1.FromBtcBaseSwap {
|
|
|
48
48
|
this.securityDeposit = this.data.getSecurityDeposit();
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
this.type =
|
|
51
|
+
this.type = index_1.SwapHandlerType.FROM_BTCLN;
|
|
52
52
|
}
|
|
53
53
|
serialize() {
|
|
54
54
|
const partialSerialized = super.serialize();
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Express } from "express";
|
|
2
2
|
import { ToBtcSwapAbs, ToBtcSwapState } from "./ToBtcSwapAbs";
|
|
3
|
-
import { MultichainData, SwapHandlerType } from "
|
|
4
|
-
import { ISwapPrice } from "
|
|
3
|
+
import { MultichainData, SwapHandlerType } from "../../SwapHandler";
|
|
4
|
+
import { ISwapPrice } from "../../../prices/ISwapPrice";
|
|
5
5
|
import { BtcTx, ChainSwapType, ClaimEvent, InitializeEvent, RefundEvent, SwapData, BitcoinRpc, BtcBlock } from "@atomiqlabs/base";
|
|
6
|
-
import { IIntermediaryStorage } from "
|
|
6
|
+
import { IIntermediaryStorage } from "../../../storage/IIntermediaryStorage";
|
|
7
7
|
import { ToBtcBaseConfig, ToBtcBaseSwapHandler } from "../ToBtcBaseSwapHandler";
|
|
8
8
|
import { PromiseQueue } from "promise-queue-ts";
|
|
9
|
-
import { IBitcoinWallet } from "
|
|
9
|
+
import { IBitcoinWallet } from "../../../wallets/IBitcoinWallet";
|
|
10
10
|
export type ToBtcConfig = ToBtcBaseConfig & {
|
|
11
11
|
sendSafetyFactor: bigint;
|
|
12
12
|
minChainCltv: bigint;
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ToBtcAbs = void 0;
|
|
4
4
|
const ToBtcSwapAbs_1 = require("./ToBtcSwapAbs");
|
|
5
|
-
const SwapHandler_1 = require("
|
|
5
|
+
const SwapHandler_1 = require("../../SwapHandler");
|
|
6
6
|
const base_1 = require("@atomiqlabs/base");
|
|
7
|
-
const Utils_1 = require("
|
|
8
|
-
const PluginManager_1 = require("
|
|
7
|
+
const Utils_1 = require("../../../utils/Utils");
|
|
8
|
+
const PluginManager_1 = require("../../../plugins/PluginManager");
|
|
9
9
|
const crypto_1 = require("crypto");
|
|
10
|
-
const SchemaVerifier_1 = require("
|
|
11
|
-
const ServerParamDecoder_1 = require("
|
|
10
|
+
const SchemaVerifier_1 = require("../../../utils/paramcoders/SchemaVerifier");
|
|
11
|
+
const ServerParamDecoder_1 = require("../../../utils/paramcoders/server/ServerParamDecoder");
|
|
12
12
|
const ToBtcBaseSwapHandler_1 = require("../ToBtcBaseSwapHandler");
|
|
13
13
|
const promise_queue_ts_1 = require("promise-queue-ts");
|
|
14
14
|
const OUTPUT_SCRIPT_MAX_LENGTH = 200;
|
|
@@ -17,7 +17,7 @@ const OUTPUT_SCRIPT_MAX_LENGTH = 200;
|
|
|
17
17
|
*/
|
|
18
18
|
class ToBtcAbs extends ToBtcBaseSwapHandler_1.ToBtcBaseSwapHandler {
|
|
19
19
|
constructor(storageDirectory, path, chainData, bitcoin, swapPricing, bitcoinRpc, config) {
|
|
20
|
-
super(storageDirectory, path, chainData, swapPricing);
|
|
20
|
+
super(storageDirectory, path, chainData, swapPricing, config);
|
|
21
21
|
this.type = SwapHandler_1.SwapHandlerType.TO_BTC;
|
|
22
22
|
this.swapType = base_1.ChainSwapType.CHAIN_NONCED;
|
|
23
23
|
this.activeSubscriptions = {};
|
|
@@ -487,7 +487,7 @@ class ToBtcAbs extends ToBtcBaseSwapHandler_1.ToBtcBaseSwapHandler {
|
|
|
487
487
|
restServer.post(this.path + "/payInvoice", (0, Utils_1.expressHandlerWrapper)(async (req, res) => {
|
|
488
488
|
const metadata = { request: {}, times: {} };
|
|
489
489
|
const chainIdentifier = req.query.chain ?? this.chains.default;
|
|
490
|
-
const { swapContract, signer } = this.getChain(chainIdentifier);
|
|
490
|
+
const { swapContract, signer, chainInterface } = this.getChain(chainIdentifier);
|
|
491
491
|
metadata.times.requestReceived = Date.now();
|
|
492
492
|
/**
|
|
493
493
|
*Sent initially:
|
|
@@ -514,7 +514,7 @@ class ToBtcAbs extends ToBtcBaseSwapHandler_1.ToBtcBaseSwapHandler {
|
|
|
514
514
|
this.isTokenSupported(chainIdentifier, val) ? val : null,
|
|
515
515
|
offerer: (val) => val != null &&
|
|
516
516
|
typeof (val) === "string" &&
|
|
517
|
-
|
|
517
|
+
chainInterface.isValidAddress(val) ? val : null,
|
|
518
518
|
exactIn: SchemaVerifier_1.FieldTypeEnum.BooleanOptional
|
|
519
519
|
});
|
|
520
520
|
if (parsedBody == null)
|
|
@@ -523,7 +523,7 @@ class ToBtcAbs extends ToBtcBaseSwapHandler_1.ToBtcBaseSwapHandler {
|
|
|
523
523
|
msg: "Invalid request body"
|
|
524
524
|
};
|
|
525
525
|
metadata.request = parsedBody;
|
|
526
|
-
const requestedAmount = { input: !!parsedBody.exactIn, amount: parsedBody.amount };
|
|
526
|
+
const requestedAmount = { input: !!parsedBody.exactIn, amount: parsedBody.amount, token: parsedBody.token };
|
|
527
527
|
const request = {
|
|
528
528
|
chainIdentifier,
|
|
529
529
|
raw: req,
|
|
@@ -537,17 +537,18 @@ class ToBtcAbs extends ToBtcBaseSwapHandler_1.ToBtcBaseSwapHandler {
|
|
|
537
537
|
this.checkRequiredConfirmations(parsedBody.confirmations);
|
|
538
538
|
this.checkAddress(parsedBody.address);
|
|
539
539
|
await this.checkVaultInitialized(chainIdentifier, parsedBody.token);
|
|
540
|
-
const fees = await this.
|
|
540
|
+
const fees = await this.AmountAssertions.preCheckToBtcAmounts(this.type, request, requestedAmount);
|
|
541
541
|
metadata.times.requestChecked = Date.now();
|
|
542
542
|
//Initialize abort controller for the parallel async operations
|
|
543
|
-
const abortController =
|
|
543
|
+
const abortController = (0, Utils_1.getAbortController)(responseStream);
|
|
544
544
|
const { pricePrefetchPromise, signDataPrefetchPromise } = this.getToBtcPrefetches(chainIdentifier, useToken, responseStream, abortController);
|
|
545
|
-
const { amountBD, networkFeeData, totalInToken, swapFee, swapFeeInToken, networkFeeInToken } = await this.checkToBtcAmount(request, requestedAmount,
|
|
545
|
+
const { amountBD, networkFeeData, totalInToken, swapFee, swapFeeInToken, networkFeeInToken } = await this.AmountAssertions.checkToBtcAmount(this.type, request, { ...requestedAmount, pricePrefetch: pricePrefetchPromise }, fees, async (amount) => {
|
|
546
546
|
metadata.times.amountsChecked = Date.now();
|
|
547
547
|
const resp = await this.checkAndGetNetworkFee(parsedBody.address, amount);
|
|
548
|
+
this.logger.debug("checkToBtcAmount(): network fee calculated, amount: " + amount.toString(10) + " fee: " + resp.networkFee.toString(10));
|
|
548
549
|
metadata.times.chainFeeCalculated = Date.now();
|
|
549
550
|
return resp;
|
|
550
|
-
}, abortController.signal
|
|
551
|
+
}, abortController.signal);
|
|
551
552
|
metadata.times.priceCalculated = Date.now();
|
|
552
553
|
const paymentHash = this.getHash(chainIdentifier, parsedBody.address, parsedBody.confirmations, parsedBody.nonce, amountBD).toString("hex");
|
|
553
554
|
//Add grace period another time, so the user has 1 hour to commit
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ToBtcSwapAbs = exports.ToBtcSwapState = void 0;
|
|
4
|
-
const
|
|
4
|
+
const index_1 = require("../../../index");
|
|
5
5
|
const ToBtcBaseSwap_1 = require("../ToBtcBaseSwap");
|
|
6
|
-
const Utils_1 = require("
|
|
6
|
+
const Utils_1 = require("../../../utils/Utils");
|
|
7
7
|
var ToBtcSwapState;
|
|
8
8
|
(function (ToBtcSwapState) {
|
|
9
9
|
ToBtcSwapState[ToBtcSwapState["REFUNDED"] = -3] = "REFUNDED";
|
|
@@ -37,7 +37,7 @@ class ToBtcSwapAbs extends ToBtcBaseSwap_1.ToBtcBaseSwap {
|
|
|
37
37
|
//Compatibility
|
|
38
38
|
this.quotedNetworkFee ?? (this.quotedNetworkFee = (0, Utils_1.deserializeBN)(chainIdOrObj.networkFee));
|
|
39
39
|
}
|
|
40
|
-
this.type =
|
|
40
|
+
this.type = index_1.SwapHandlerType.TO_BTC;
|
|
41
41
|
}
|
|
42
42
|
serialize() {
|
|
43
43
|
const partialSerialized = super.serialize();
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Express } from "express";
|
|
2
2
|
import { ToBtcLnSwapAbs, ToBtcLnSwapState } from "./ToBtcLnSwapAbs";
|
|
3
|
-
import { MultichainData, SwapHandlerType } from "
|
|
4
|
-
import { ISwapPrice } from "
|
|
3
|
+
import { MultichainData, SwapHandlerType } from "../../SwapHandler";
|
|
4
|
+
import { ISwapPrice } from "../../../prices/ISwapPrice";
|
|
5
5
|
import { ChainSwapType, ClaimEvent, InitializeEvent, RefundEvent, SwapData } from "@atomiqlabs/base";
|
|
6
|
-
import { IIntermediaryStorage } from "
|
|
6
|
+
import { IIntermediaryStorage } from "../../../storage/IIntermediaryStorage";
|
|
7
7
|
import { ToBtcBaseConfig, ToBtcBaseSwapHandler } from "../ToBtcBaseSwapHandler";
|
|
8
|
-
import { ILightningWallet, ParsedPaymentRequest } from "
|
|
8
|
+
import { ILightningWallet, ParsedPaymentRequest } from "../../../wallets/ILightningWallet";
|
|
9
|
+
import { LightningAssertions } from "../../assertions/LightningAssertions";
|
|
9
10
|
export type ToBtcLnConfig = ToBtcBaseConfig & {
|
|
10
11
|
routingFeeMultiplier: bigint;
|
|
11
12
|
minSendCltv: bigint;
|
|
@@ -54,12 +55,7 @@ export type ToBtcLnRequestType = {
|
|
|
54
55
|
* Swap handler handling to BTCLN swaps using submarine swaps
|
|
55
56
|
*/
|
|
56
57
|
export declare class ToBtcLnAbs extends ToBtcBaseSwapHandler<ToBtcLnSwapAbs, ToBtcLnSwapState> {
|
|
57
|
-
protected readonly LIGHTNING_LIQUIDITY_CACHE_TIMEOUT: number;
|
|
58
58
|
activeSubscriptions: Set<string>;
|
|
59
|
-
lightningLiquidityCache: {
|
|
60
|
-
liquidity: bigint;
|
|
61
|
-
timestamp: number;
|
|
62
|
-
};
|
|
63
59
|
readonly type = SwapHandlerType.TO_BTCLN;
|
|
64
60
|
readonly swapType = ChainSwapType.HTLC;
|
|
65
61
|
readonly config: ToBtcLnConfig & {
|
|
@@ -69,6 +65,7 @@ export declare class ToBtcLnAbs extends ToBtcBaseSwapHandler<ToBtcLnSwapAbs, ToB
|
|
|
69
65
|
[reqId: string]: ExactInAuthorization;
|
|
70
66
|
};
|
|
71
67
|
readonly lightning: ILightningWallet;
|
|
68
|
+
readonly LightningAssertions: LightningAssertions;
|
|
72
69
|
constructor(storageDirectory: IIntermediaryStorage<ToBtcLnSwapAbs>, path: string, chainData: MultichainData, lightning: ILightningWallet, swapPricing: ISwapPrice, config: ToBtcLnConfig);
|
|
73
70
|
/**
|
|
74
71
|
* Cleans up exactIn authorization that are already past their expiry
|
|
@@ -143,23 +140,6 @@ export declare class ToBtcLnAbs extends ToBtcBaseSwapHandler<ToBtcLnSwapAbs, ToB
|
|
|
143
140
|
* @throws {DefinedRuntimeError} will throw an error if the expiry time is too short
|
|
144
141
|
*/
|
|
145
142
|
private checkExpiry;
|
|
146
|
-
/**
|
|
147
|
-
* Checks if the prior payment with the same paymentHash exists
|
|
148
|
-
*
|
|
149
|
-
* @param paymentHash
|
|
150
|
-
* @param abortSignal
|
|
151
|
-
* @throws {DefinedRuntimeError} will throw an error if payment already exists
|
|
152
|
-
*/
|
|
153
|
-
private checkPriorPayment;
|
|
154
|
-
/**
|
|
155
|
-
* Checks if the underlying LND backend has enough liquidity in channels to honor the swap
|
|
156
|
-
*
|
|
157
|
-
* @param amount
|
|
158
|
-
* @param abortSignal
|
|
159
|
-
* @param useCached Whether to use cached liquidity values
|
|
160
|
-
* @throws {DefinedRuntimeError} will throw an error if there isn't enough liquidity
|
|
161
|
-
*/
|
|
162
|
-
private checkLiquidity;
|
|
163
143
|
/**
|
|
164
144
|
* Estimates the routing fee & confidence by either probing or routing (if probing fails), the fee is also adjusted
|
|
165
145
|
* according to routing fee multiplier, and subject to minimums set in config
|