@atomiqlabs/lp-lib 10.3.11 → 11.0.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 +3 -1
- package/dist/index.js +3 -4
- package/dist/plugins/IPlugin.d.ts +3 -2
- package/dist/plugins/PluginManager.d.ts +3 -2
- package/dist/plugins/PluginManager.js +2 -2
- package/dist/prices/OKXSwapPrice.d.ts +27 -0
- package/dist/prices/OKXSwapPrice.js +106 -0
- package/dist/swaps/FromBtcBaseSwap.d.ts +5 -1
- package/dist/swaps/FromBtcBaseSwap.js +20 -0
- package/dist/swaps/FromBtcBaseSwapHandler.d.ts +1 -0
- package/dist/swaps/FromBtcBaseSwapHandler.js +1 -1
- package/dist/swaps/FromBtcLnBaseSwapHandler.d.ts +8 -6
- package/dist/swaps/FromBtcLnBaseSwapHandler.js +7 -5
- package/dist/swaps/SwapHandler.d.ts +1 -4
- package/dist/swaps/SwapHandler.js +1 -2
- package/dist/swaps/SwapHandlerSwap.d.ts +4 -0
- package/dist/swaps/SwapHandlerSwap.js +9 -1
- package/dist/swaps/ToBtcBaseSwap.d.ts +3 -1
- package/dist/swaps/ToBtcBaseSwap.js +8 -2
- package/dist/swaps/ToBtcBaseSwapHandler.d.ts +1 -0
- package/dist/swaps/ToBtcBaseSwapHandler.js +1 -1
- package/dist/swaps/frombtc_abstract/FromBtcAbs.d.ts +3 -5
- package/dist/swaps/frombtc_abstract/FromBtcAbs.js +18 -25
- package/dist/swaps/frombtc_abstract/FromBtcSwapAbs.d.ts +1 -4
- package/dist/swaps/frombtc_abstract/FromBtcSwapAbs.js +3 -16
- package/dist/swaps/frombtc_trusted/FromBtcTrusted.d.ts +6 -9
- package/dist/swaps/frombtc_trusted/FromBtcTrusted.js +238 -137
- package/dist/swaps/frombtc_trusted/FromBtcTrustedSwap.d.ts +9 -6
- package/dist/swaps/frombtc_trusted/FromBtcTrustedSwap.js +15 -10
- package/dist/swaps/frombtcln_abstract/FromBtcLnAbs.d.ts +2 -2
- package/dist/swaps/frombtcln_abstract/FromBtcLnAbs.js +42 -62
- package/dist/swaps/frombtcln_abstract/FromBtcLnSwapAbs.d.ts +1 -6
- package/dist/swaps/frombtcln_abstract/FromBtcLnSwapAbs.js +2 -14
- package/dist/swaps/frombtcln_trusted/FromBtcLnTrusted.d.ts +3 -5
- package/dist/swaps/frombtcln_trusted/FromBtcLnTrusted.js +90 -87
- package/dist/swaps/frombtcln_trusted/FromBtcLnTrustedSwap.d.ts +1 -2
- package/dist/swaps/frombtcln_trusted/FromBtcLnTrustedSwap.js +5 -8
- package/dist/swaps/tobtc_abstract/ToBtcAbs.d.ts +5 -125
- package/dist/swaps/tobtc_abstract/ToBtcAbs.js +41 -334
- package/dist/swaps/tobtc_abstract/ToBtcSwapAbs.d.ts +1 -4
- package/dist/swaps/tobtc_abstract/ToBtcSwapAbs.js +2 -11
- package/dist/swaps/tobtcln_abstract/ToBtcLnAbs.d.ts +5 -55
- package/dist/swaps/tobtcln_abstract/ToBtcLnAbs.js +152 -398
- package/dist/swaps/tobtcln_abstract/ToBtcLnSwapAbs.d.ts +1 -6
- package/dist/swaps/tobtcln_abstract/ToBtcLnSwapAbs.js +2 -15
- package/dist/utils/Utils.d.ts +0 -10
- package/dist/utils/Utils.js +1 -34
- package/dist/wallets/IBitcoinWallet.d.ts +62 -0
- package/dist/wallets/IBitcoinWallet.js +2 -0
- package/dist/wallets/ILightningWallet.d.ts +118 -0
- package/dist/wallets/ILightningWallet.js +37 -0
- package/package.json +4 -9
- package/src/index.ts +4 -5
- package/src/plugins/IPlugin.ts +4 -2
- package/src/plugins/PluginManager.ts +6 -3
- package/src/prices/OKXSwapPrice.ts +114 -0
- package/src/swaps/FromBtcBaseSwap.ts +24 -1
- package/src/swaps/FromBtcBaseSwapHandler.ts +6 -2
- package/src/swaps/FromBtcLnBaseSwapHandler.ts +22 -6
- package/src/swaps/SwapHandler.ts +1 -8
- package/src/swaps/SwapHandlerSwap.ts +14 -1
- package/src/swaps/ToBtcBaseSwap.ts +12 -3
- package/src/swaps/ToBtcBaseSwapHandler.ts +6 -2
- package/src/swaps/frombtc_abstract/FromBtcAbs.ts +24 -28
- package/src/swaps/frombtc_abstract/FromBtcSwapAbs.ts +3 -18
- package/src/swaps/frombtc_trusted/FromBtcTrusted.ts +260 -159
- package/src/swaps/frombtc_trusted/FromBtcTrustedSwap.ts +22 -15
- package/src/swaps/frombtcln_abstract/FromBtcLnAbs.ts +69 -79
- package/src/swaps/frombtcln_abstract/FromBtcLnSwapAbs.ts +3 -20
- package/src/swaps/frombtcln_trusted/FromBtcLnTrusted.ts +108 -103
- package/src/swaps/frombtcln_trusted/FromBtcLnTrustedSwap.ts +6 -9
- package/src/swaps/tobtc_abstract/ToBtcAbs.ts +52 -410
- package/src/swaps/tobtc_abstract/ToBtcSwapAbs.ts +3 -18
- package/src/swaps/tobtcln_abstract/ToBtcLnAbs.ts +157 -434
- package/src/swaps/tobtcln_abstract/ToBtcLnSwapAbs.ts +3 -20
- package/src/utils/Utils.ts +0 -31
- package/src/wallets/IBitcoinWallet.ts +66 -0
- package/src/wallets/ILightningWallet.ts +179 -0
- package/dist/fees/OneDollarFeeEstimator.d.ts +0 -16
- package/dist/fees/OneDollarFeeEstimator.js +0 -71
- package/dist/utils/coinselect2/accumulative.d.ts +0 -6
- package/dist/utils/coinselect2/accumulative.js +0 -44
- package/dist/utils/coinselect2/blackjack.d.ts +0 -6
- package/dist/utils/coinselect2/blackjack.js +0 -41
- package/dist/utils/coinselect2/index.d.ts +0 -16
- package/dist/utils/coinselect2/index.js +0 -40
- package/dist/utils/coinselect2/utils.d.ts +0 -64
- package/dist/utils/coinselect2/utils.js +0 -121
- package/src/fees/OneDollarFeeEstimator.ts +0 -95
- package/src/utils/coinselect2/accumulative.js +0 -32
- package/src/utils/coinselect2/accumulative.ts +0 -58
- package/src/utils/coinselect2/blackjack.js +0 -29
- package/src/utils/coinselect2/blackjack.ts +0 -54
- package/src/utils/coinselect2/index.js +0 -16
- package/src/utils/coinselect2/index.ts +0 -50
- package/src/utils/coinselect2/utils.js +0 -110
- package/src/utils/coinselect2/utils.ts +0 -183
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from "./info/InfoHandler";
|
|
2
2
|
export * from "./prices/CoinGeckoSwapPrice";
|
|
3
3
|
export * from "./prices/BinanceSwapPrice";
|
|
4
|
+
export * from "./prices/OKXSwapPrice";
|
|
4
5
|
export * from "./storage/IIntermediaryStorage";
|
|
5
6
|
export * from "./storagemanager/StorageManager";
|
|
6
7
|
export * from "./storagemanager/IntermediaryStorageManager";
|
|
@@ -22,7 +23,6 @@ export * from "./swaps/SwapHandlerSwap";
|
|
|
22
23
|
export * from "./plugins/PluginManager";
|
|
23
24
|
export * from "./plugins/IPlugin";
|
|
24
25
|
export * from "./fees/IBtcFeeEstimator";
|
|
25
|
-
export * from "./fees/OneDollarFeeEstimator";
|
|
26
26
|
export * from "./utils/paramcoders/IParamReader";
|
|
27
27
|
export * from "./utils/paramcoders/IParamWriter";
|
|
28
28
|
export * from "./utils/paramcoders/LegacyParamEncoder";
|
|
@@ -31,3 +31,5 @@ export * from "./utils/paramcoders/ParamEncoder";
|
|
|
31
31
|
export * from "./utils/paramcoders/SchemaVerifier";
|
|
32
32
|
export * from "./utils/paramcoders/server/ServerParamDecoder";
|
|
33
33
|
export * from "./utils/paramcoders/server/ServerParamEncoder";
|
|
34
|
+
export * from "./wallets/IBitcoinWallet";
|
|
35
|
+
export * from "./wallets/ILightningWallet";
|
package/dist/index.js
CHANGED
|
@@ -14,12 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
const bitcoin = require("bitcoinjs-lib");
|
|
18
|
-
const tinySecpk256Interface = require("@bitcoinerlab/secp256k1");
|
|
19
|
-
bitcoin.initEccLib(tinySecpk256Interface);
|
|
20
17
|
__exportStar(require("./info/InfoHandler"), exports);
|
|
21
18
|
__exportStar(require("./prices/CoinGeckoSwapPrice"), exports);
|
|
22
19
|
__exportStar(require("./prices/BinanceSwapPrice"), exports);
|
|
20
|
+
__exportStar(require("./prices/OKXSwapPrice"), exports);
|
|
23
21
|
__exportStar(require("./storage/IIntermediaryStorage"), exports);
|
|
24
22
|
__exportStar(require("./storagemanager/StorageManager"), exports);
|
|
25
23
|
__exportStar(require("./storagemanager/IntermediaryStorageManager"), exports);
|
|
@@ -41,7 +39,6 @@ __exportStar(require("./swaps/SwapHandlerSwap"), exports);
|
|
|
41
39
|
__exportStar(require("./plugins/PluginManager"), exports);
|
|
42
40
|
__exportStar(require("./plugins/IPlugin"), exports);
|
|
43
41
|
__exportStar(require("./fees/IBtcFeeEstimator"), exports);
|
|
44
|
-
__exportStar(require("./fees/OneDollarFeeEstimator"), exports);
|
|
45
42
|
__exportStar(require("./utils/paramcoders/IParamReader"), exports);
|
|
46
43
|
__exportStar(require("./utils/paramcoders/IParamWriter"), exports);
|
|
47
44
|
__exportStar(require("./utils/paramcoders/LegacyParamEncoder"), exports);
|
|
@@ -50,3 +47,5 @@ __exportStar(require("./utils/paramcoders/ParamEncoder"), exports);
|
|
|
50
47
|
__exportStar(require("./utils/paramcoders/SchemaVerifier"), exports);
|
|
51
48
|
__exportStar(require("./utils/paramcoders/server/ServerParamDecoder"), exports);
|
|
52
49
|
__exportStar(require("./utils/paramcoders/server/ServerParamEncoder"), exports);
|
|
50
|
+
__exportStar(require("./wallets/IBitcoinWallet"), exports);
|
|
51
|
+
__exportStar(require("./wallets/ILightningWallet"), exports);
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { BitcoinRpc } from "@atomiqlabs/base";
|
|
2
2
|
import { FromBtcLnRequestType, FromBtcRequestType, ISwapPrice, MultichainData, RequestData, SwapHandler, ToBtcLnRequestType, ToBtcRequestType } from "..";
|
|
3
3
|
import { SwapHandlerSwap } from "../swaps/SwapHandlerSwap";
|
|
4
|
-
import { AuthenticatedLnd } from "lightning";
|
|
5
4
|
import * as BN from "bn.js";
|
|
6
5
|
import { Command } from "@atomiqlabs/server-base";
|
|
7
6
|
import { FromBtcLnTrustedRequestType } from "../swaps/frombtcln_trusted/FromBtcLnTrusted";
|
|
7
|
+
import { IBitcoinWallet } from "../wallets/IBitcoinWallet";
|
|
8
|
+
import { ILightningWallet } from "../wallets/ILightningWallet";
|
|
8
9
|
export type QuoteThrow = {
|
|
9
10
|
type: "throw";
|
|
10
11
|
message: string;
|
|
@@ -55,7 +56,7 @@ export interface IPlugin {
|
|
|
55
56
|
name: string;
|
|
56
57
|
author: string;
|
|
57
58
|
description: string;
|
|
58
|
-
onEnable(chainsData: MultichainData, bitcoinRpc: BitcoinRpc<any>,
|
|
59
|
+
onEnable(chainsData: MultichainData, bitcoinRpc: BitcoinRpc<any>, bitcoinWallet: IBitcoinWallet, lightningWallet: ILightningWallet, swapPricing: ISwapPrice, tokens: {
|
|
59
60
|
[ticker: string]: {
|
|
60
61
|
[chainId: string]: {
|
|
61
62
|
address: string;
|
|
@@ -2,9 +2,10 @@ import { BitcoinRpc, SwapData } from "@atomiqlabs/base";
|
|
|
2
2
|
import { IPlugin, PluginQuote, QuoteAmountTooHigh, QuoteAmountTooLow, QuoteSetFees, QuoteThrow, ToBtcPluginQuote } from "./IPlugin";
|
|
3
3
|
import { FromBtcLnRequestType, FromBtcRequestType, ISwapPrice, MultichainData, RequestData, SwapHandler, ToBtcLnRequestType, ToBtcRequestType } from "..";
|
|
4
4
|
import { SwapHandlerSwap } from "../swaps/SwapHandlerSwap";
|
|
5
|
-
import { AuthenticatedLnd } from "lightning";
|
|
6
5
|
import * as BN from "bn.js";
|
|
7
6
|
import { FromBtcLnTrustedRequestType } from "../swaps/frombtcln_trusted/FromBtcLnTrusted";
|
|
7
|
+
import { IBitcoinWallet } from "../wallets/IBitcoinWallet";
|
|
8
|
+
import { ILightningWallet } from "../wallets/ILightningWallet";
|
|
8
9
|
export type FailSwapResponse = {
|
|
9
10
|
type: "fail";
|
|
10
11
|
code?: number;
|
|
@@ -26,7 +27,7 @@ export declare class PluginManager {
|
|
|
26
27
|
static plugins: Map<string, IPlugin>;
|
|
27
28
|
static registerPlugin(name: string, plugin: IPlugin): void;
|
|
28
29
|
static unregisterPlugin(name: string): boolean;
|
|
29
|
-
static enable<T extends SwapData>(chainsData: MultichainData, bitcoinRpc: BitcoinRpc<any>,
|
|
30
|
+
static enable<T extends SwapData>(chainsData: MultichainData, bitcoinRpc: BitcoinRpc<any>, bitcoinWallet: IBitcoinWallet, lightningWallet: ILightningWallet, swapPricing: ISwapPrice, tokens: {
|
|
30
31
|
[ticker: string]: {
|
|
31
32
|
[chainId: string]: {
|
|
32
33
|
address: string;
|
|
@@ -27,7 +27,7 @@ class PluginManager {
|
|
|
27
27
|
static unregisterPlugin(name) {
|
|
28
28
|
return PluginManager.plugins.delete(name);
|
|
29
29
|
}
|
|
30
|
-
static enable(chainsData, bitcoinRpc,
|
|
30
|
+
static enable(chainsData, bitcoinRpc, bitcoinWallet, lightningWallet, swapPricing, tokens, directory) {
|
|
31
31
|
return __awaiter(this, void 0, void 0, function* () {
|
|
32
32
|
try {
|
|
33
33
|
fs.mkdirSync(directory);
|
|
@@ -39,7 +39,7 @@ class PluginManager {
|
|
|
39
39
|
fs.mkdirSync(directory + "/" + name);
|
|
40
40
|
}
|
|
41
41
|
catch (e) { }
|
|
42
|
-
yield plugin.onEnable(chainsData, bitcoinRpc,
|
|
42
|
+
yield plugin.onEnable(chainsData, bitcoinRpc, bitcoinWallet, lightningWallet, swapPricing, tokens, directory + "/" + name);
|
|
43
43
|
}
|
|
44
44
|
catch (e) {
|
|
45
45
|
pluginLogger.error(plugin, "enable(): plugin enable error", e);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as BN from "bn.js";
|
|
2
|
+
import { ISwapPrice } from "../swaps/ISwapPrice";
|
|
3
|
+
export type OKXPriceData = {
|
|
4
|
+
[pair: string]: {
|
|
5
|
+
[chainId: string]: {
|
|
6
|
+
address: string;
|
|
7
|
+
decimals: number;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export declare class OKXSwapPrice extends ISwapPrice<{
|
|
12
|
+
pair: string;
|
|
13
|
+
decimals: number;
|
|
14
|
+
}> {
|
|
15
|
+
url: string;
|
|
16
|
+
cache: {
|
|
17
|
+
[pair: string]: {
|
|
18
|
+
price: number;
|
|
19
|
+
expiry: number;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
constructor(url: string, coins: OKXPriceData);
|
|
23
|
+
fetchPrice(pair: string): Promise<number>;
|
|
24
|
+
getPrice(tokenData: {
|
|
25
|
+
pair: string;
|
|
26
|
+
}): Promise<BN>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.OKXSwapPrice = void 0;
|
|
13
|
+
const BN = require("bn.js");
|
|
14
|
+
const ISwapPrice_1 = require("../swaps/ISwapPrice");
|
|
15
|
+
const CACHE_DURATION = 15000;
|
|
16
|
+
class OKXSwapPrice extends ISwapPrice_1.ISwapPrice {
|
|
17
|
+
constructor(url, coins) {
|
|
18
|
+
const coinsMap = {};
|
|
19
|
+
for (let pair in coins) {
|
|
20
|
+
const chains = coins[pair];
|
|
21
|
+
for (let chainId in chains) {
|
|
22
|
+
const tokenData = chains[chainId];
|
|
23
|
+
if (coinsMap[chainId] == null)
|
|
24
|
+
coinsMap[chainId] = {};
|
|
25
|
+
coinsMap[chainId][tokenData.address] = {
|
|
26
|
+
pair,
|
|
27
|
+
decimals: tokenData.decimals
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
super(coinsMap);
|
|
32
|
+
this.cache = {};
|
|
33
|
+
this.url = url || "https://www.okx.com/api/v5";
|
|
34
|
+
}
|
|
35
|
+
fetchPrice(pair) {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
const response = yield fetch(this.url + "/market/index-tickers?instId=" + pair, {
|
|
38
|
+
method: "GET"
|
|
39
|
+
});
|
|
40
|
+
if (response.status !== 200) {
|
|
41
|
+
let resp;
|
|
42
|
+
try {
|
|
43
|
+
resp = yield response.text();
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
throw new Error(response.statusText);
|
|
47
|
+
}
|
|
48
|
+
throw new Error(resp);
|
|
49
|
+
}
|
|
50
|
+
let jsonBody = yield response.json();
|
|
51
|
+
return parseFloat(jsonBody.data[0].idxPx);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
getPrice(tokenData) {
|
|
55
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
const pair = tokenData.pair;
|
|
57
|
+
if (pair.startsWith("$fixed-")) {
|
|
58
|
+
const amt = parseFloat(pair.substring(7));
|
|
59
|
+
return new BN(Math.floor(amt * 1000000));
|
|
60
|
+
}
|
|
61
|
+
const arr = pair.split(";");
|
|
62
|
+
const promises = [];
|
|
63
|
+
const cachedValue = this.cache[pair];
|
|
64
|
+
if (cachedValue == null || cachedValue.expiry < Date.now()) {
|
|
65
|
+
let resultPrice = 1;
|
|
66
|
+
for (let pair of arr) {
|
|
67
|
+
let invert = false;
|
|
68
|
+
if (pair.startsWith("!")) {
|
|
69
|
+
invert = true;
|
|
70
|
+
pair = pair.substring(1);
|
|
71
|
+
}
|
|
72
|
+
const cachedValue = this.cache[pair];
|
|
73
|
+
if (cachedValue == null || cachedValue.expiry < Date.now()) {
|
|
74
|
+
promises.push(this.fetchPrice(pair).then(price => {
|
|
75
|
+
this.cache[pair] = {
|
|
76
|
+
price,
|
|
77
|
+
expiry: Date.now() + CACHE_DURATION
|
|
78
|
+
};
|
|
79
|
+
if (invert) {
|
|
80
|
+
resultPrice /= price;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
resultPrice *= price;
|
|
84
|
+
}
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
if (invert) {
|
|
89
|
+
resultPrice /= cachedValue.price;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
resultPrice *= cachedValue.price;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
yield Promise.all(promises);
|
|
97
|
+
this.cache[pair] = {
|
|
98
|
+
price: resultPrice,
|
|
99
|
+
expiry: Date.now() + CACHE_DURATION
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return new BN(Math.floor(this.cache[pair].price * 100000000000000));
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.OKXSwapPrice = OKXSwapPrice;
|
|
@@ -2,11 +2,15 @@ import { SwapData } from "@atomiqlabs/base";
|
|
|
2
2
|
import { SwapHandlerSwap } from "./SwapHandlerSwap";
|
|
3
3
|
import * as BN from "bn.js";
|
|
4
4
|
export declare abstract class FromBtcBaseSwap<T extends SwapData, S = any> extends SwapHandlerSwap<T, S> {
|
|
5
|
+
amount: BN;
|
|
6
|
+
protected constructor(chainIdentifier: string, amount: BN, swapFee: BN, swapFeeInToken: BN);
|
|
7
|
+
protected constructor(obj: any);
|
|
5
8
|
getInputAmount(): BN;
|
|
6
|
-
|
|
9
|
+
getTotalInputAmount(): BN;
|
|
7
10
|
getOutputAmount(): BN;
|
|
8
11
|
getSwapFee(): {
|
|
9
12
|
inInputToken: BN;
|
|
10
13
|
inOutputToken: BN;
|
|
11
14
|
};
|
|
15
|
+
serialize(): any;
|
|
12
16
|
}
|
|
@@ -2,15 +2,35 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FromBtcBaseSwap = void 0;
|
|
4
4
|
const SwapHandlerSwap_1 = require("./SwapHandlerSwap");
|
|
5
|
+
const BN = require("bn.js");
|
|
6
|
+
const Utils_1 = require("../utils/Utils");
|
|
5
7
|
class FromBtcBaseSwap extends SwapHandlerSwap_1.SwapHandlerSwap {
|
|
8
|
+
constructor(obj, amount, swapFee, swapFeeInToken) {
|
|
9
|
+
super(obj, swapFee, swapFeeInToken);
|
|
10
|
+
if (typeof (obj) === "string" && BN.isBN(amount) && BN.isBN(swapFee) && BN.isBN(swapFeeInToken)) {
|
|
11
|
+
this.amount = amount;
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
this.amount = (0, Utils_1.deserializeBN)(obj.amount);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
;
|
|
6
18
|
getInputAmount() {
|
|
7
19
|
return this.getTotalInputAmount().sub(this.getSwapFee().inInputToken);
|
|
8
20
|
}
|
|
21
|
+
getTotalInputAmount() {
|
|
22
|
+
return this.amount;
|
|
23
|
+
}
|
|
9
24
|
getOutputAmount() {
|
|
10
25
|
return this.data.getAmount();
|
|
11
26
|
}
|
|
12
27
|
getSwapFee() {
|
|
13
28
|
return { inInputToken: this.swapFee, inOutputToken: this.swapFeeInToken };
|
|
14
29
|
}
|
|
30
|
+
serialize() {
|
|
31
|
+
const partialSerialized = super.serialize();
|
|
32
|
+
partialSerialized.amount = (0, Utils_1.serializeBN)(this.amount);
|
|
33
|
+
return partialSerialized;
|
|
34
|
+
}
|
|
15
35
|
}
|
|
16
36
|
exports.FromBtcBaseSwap = FromBtcBaseSwap;
|
|
@@ -287,7 +287,7 @@ class FromBtcBaseSwapHandler extends SwapHandler_1.SwapHandler {
|
|
|
287
287
|
this.logger.debug("getFromBtcSignatureData(): using fee rate from client: ", feeRate);
|
|
288
288
|
const sigData = yield swapContract.getInitSignature(signer, swapObject, this.config.authorizationTimeout, prefetchedSignData, feeRate);
|
|
289
289
|
abortSignal.throwIfAborted();
|
|
290
|
-
return sigData;
|
|
290
|
+
return Object.assign(Object.assign({}, sigData), { feeRate });
|
|
291
291
|
});
|
|
292
292
|
}
|
|
293
293
|
}
|
|
@@ -2,7 +2,13 @@ import { SwapHandlerSwap } from "./SwapHandlerSwap";
|
|
|
2
2
|
import { SwapData } from "@atomiqlabs/base";
|
|
3
3
|
import { FromBtcBaseSwapHandler } from "./FromBtcBaseSwapHandler";
|
|
4
4
|
import * as BN from "bn.js";
|
|
5
|
+
import { ILightningWallet, LightningNetworkChannel } from "../wallets/ILightningWallet";
|
|
6
|
+
import { IIntermediaryStorage } from "../storage/IIntermediaryStorage";
|
|
7
|
+
import { MultichainData } from "./SwapHandler";
|
|
8
|
+
import { ISwapPrice } from "./ISwapPrice";
|
|
5
9
|
export declare abstract class FromBtcLnBaseSwapHandler<V extends SwapHandlerSwap<SwapData, S>, S> extends FromBtcBaseSwapHandler<V, S> {
|
|
10
|
+
readonly lightning: ILightningWallet;
|
|
11
|
+
constructor(storageDirectory: IIntermediaryStorage<V>, path: string, chains: MultichainData, lightning: ILightningWallet, swapPricing: ISwapPrice);
|
|
6
12
|
/**
|
|
7
13
|
* Checks if we have enough inbound liquidity to be able to receive an LN payment (without MPP)
|
|
8
14
|
*
|
|
@@ -11,15 +17,11 @@ export declare abstract class FromBtcLnBaseSwapHandler<V extends SwapHandlerSwap
|
|
|
11
17
|
* @param signal
|
|
12
18
|
* @throws {DefinedRuntimeError} will throw an error if there isn't enough inbound liquidity to receive the LN payment
|
|
13
19
|
*/
|
|
14
|
-
protected checkInboundLiquidity(amountBD: BN, channelsPrefetch: Promise<
|
|
15
|
-
channels: any[];
|
|
16
|
-
}>, signal: AbortSignal): Promise<void>;
|
|
20
|
+
protected checkInboundLiquidity(amountBD: BN, channelsPrefetch: Promise<LightningNetworkChannel[]>, signal: AbortSignal): Promise<void>;
|
|
17
21
|
/**
|
|
18
22
|
* Starts LN channels pre-fetch
|
|
19
23
|
*
|
|
20
24
|
* @param abortController
|
|
21
25
|
*/
|
|
22
|
-
protected getChannelsPrefetch(abortController: AbortController): Promise<
|
|
23
|
-
channels: any[];
|
|
24
|
-
}>;
|
|
26
|
+
protected getChannelsPrefetch(abortController: AbortController): Promise<LightningNetworkChannel[]>;
|
|
25
27
|
}
|
|
@@ -11,9 +11,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.FromBtcLnBaseSwapHandler = void 0;
|
|
13
13
|
const FromBtcBaseSwapHandler_1 = require("./FromBtcBaseSwapHandler");
|
|
14
|
-
const BN = require("bn.js");
|
|
15
|
-
const lncli = require("ln-service");
|
|
16
14
|
class FromBtcLnBaseSwapHandler extends FromBtcBaseSwapHandler_1.FromBtcBaseSwapHandler {
|
|
15
|
+
constructor(storageDirectory, path, chains, lightning, swapPricing) {
|
|
16
|
+
super(storageDirectory, path, chains, swapPricing);
|
|
17
|
+
this.lightning = lightning;
|
|
18
|
+
}
|
|
17
19
|
/**
|
|
18
20
|
* Checks if we have enough inbound liquidity to be able to receive an LN payment (without MPP)
|
|
19
21
|
*
|
|
@@ -27,8 +29,8 @@ class FromBtcLnBaseSwapHandler extends FromBtcBaseSwapHandler_1.FromBtcBaseSwapH
|
|
|
27
29
|
const channelsResponse = yield channelsPrefetch;
|
|
28
30
|
signal.throwIfAborted();
|
|
29
31
|
let hasEnoughInboundLiquidity = false;
|
|
30
|
-
channelsResponse.
|
|
31
|
-
if (
|
|
32
|
+
channelsResponse.forEach(channel => {
|
|
33
|
+
if (channel.remoteBalance.gte(amountBD))
|
|
32
34
|
hasEnoughInboundLiquidity = true;
|
|
33
35
|
});
|
|
34
36
|
if (!hasEnoughInboundLiquidity) {
|
|
@@ -45,7 +47,7 @@ class FromBtcLnBaseSwapHandler extends FromBtcBaseSwapHandler_1.FromBtcBaseSwapH
|
|
|
45
47
|
* @param abortController
|
|
46
48
|
*/
|
|
47
49
|
getChannelsPrefetch(abortController) {
|
|
48
|
-
return
|
|
50
|
+
return this.lightning.getChannels(true).catch(e => {
|
|
49
51
|
this.logger.error("getChannelsPrefetch(): error", e);
|
|
50
52
|
abortController.abort(e);
|
|
51
53
|
return null;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Express, Request } from "express";
|
|
2
2
|
import { ISwapPrice } from "./ISwapPrice";
|
|
3
3
|
import { ChainType, ClaimEvent, InitializeEvent, RefundEvent, SwapData, SwapEvent } from "@atomiqlabs/base";
|
|
4
|
-
import { AuthenticatedLnd } from "lightning";
|
|
5
4
|
import { SwapHandlerSwap } from "./SwapHandlerSwap";
|
|
6
5
|
import { IIntermediaryStorage } from "../storage/IIntermediaryStorage";
|
|
7
6
|
import * as BN from "bn.js";
|
|
@@ -33,7 +32,6 @@ export type SwapBaseConfig = {
|
|
|
33
32
|
feePPM: BN;
|
|
34
33
|
max: BN;
|
|
35
34
|
min: BN;
|
|
36
|
-
maxSkew: number;
|
|
37
35
|
safetyFactor: BN;
|
|
38
36
|
swapCheckInterval: number;
|
|
39
37
|
};
|
|
@@ -70,7 +68,6 @@ export declare abstract class SwapHandler<V extends SwapHandlerSwap<SwapData, S>
|
|
|
70
68
|
[chainId: string]: Set<string>;
|
|
71
69
|
};
|
|
72
70
|
readonly swapPricing: ISwapPrice;
|
|
73
|
-
readonly LND: AuthenticatedLnd;
|
|
74
71
|
abstract config: SwapBaseConfig;
|
|
75
72
|
logger: {
|
|
76
73
|
debug: (msg: string, ...args: any) => void;
|
|
@@ -84,7 +81,7 @@ export declare abstract class SwapHandler<V extends SwapHandlerSwap<SwapData, S>
|
|
|
84
81
|
warn: (swap: SwapHandlerSwap | SwapEvent<SwapData> | SwapData, msg: string, ...args: any) => void;
|
|
85
82
|
error: (swap: SwapHandlerSwap | SwapEvent<SwapData> | SwapData, msg: string, ...args: any) => void;
|
|
86
83
|
};
|
|
87
|
-
protected constructor(storageDirectory: IIntermediaryStorage<V>, path: string, chainsData: MultichainData,
|
|
84
|
+
protected constructor(storageDirectory: IIntermediaryStorage<V>, path: string, chainsData: MultichainData, swapPricing: ISwapPrice);
|
|
88
85
|
protected getDefaultChain(): ChainData;
|
|
89
86
|
protected getChain(identifier: string): ChainData;
|
|
90
87
|
protected abstract processPastSwaps(): Promise<void>;
|
|
@@ -28,7 +28,7 @@ var SwapHandlerType;
|
|
|
28
28
|
* An abstract class defining a singular swap service
|
|
29
29
|
*/
|
|
30
30
|
class SwapHandler {
|
|
31
|
-
constructor(storageDirectory, path, chainsData,
|
|
31
|
+
constructor(storageDirectory, path, chainsData, swapPricing) {
|
|
32
32
|
this.logger = {
|
|
33
33
|
debug: (msg, ...args) => console.debug("SwapHandler(" + this.type + "): " + msg, ...args),
|
|
34
34
|
info: (msg, ...args) => console.info("SwapHandler(" + this.type + "): " + msg, ...args),
|
|
@@ -46,7 +46,6 @@ class SwapHandler {
|
|
|
46
46
|
if (this.chains.chains[this.chains.default] == null)
|
|
47
47
|
throw new Error("Invalid default chain specified");
|
|
48
48
|
this.path = path;
|
|
49
|
-
this.LND = lnd;
|
|
50
49
|
this.swapPricing = swapPricing;
|
|
51
50
|
this.allowedTokens = {};
|
|
52
51
|
for (let chainId in chainsData.chains) {
|
|
@@ -20,6 +20,10 @@ export declare abstract class SwapHandlerSwap<T extends SwapData = SwapData, S =
|
|
|
20
20
|
};
|
|
21
21
|
readonly swapFee: BN;
|
|
22
22
|
readonly swapFeeInToken: BN;
|
|
23
|
+
prefix: string;
|
|
24
|
+
timeout: string;
|
|
25
|
+
signature: string;
|
|
26
|
+
feeRate: string;
|
|
23
27
|
protected constructor(chainIdentifier: string, swapFee: BN, swapFeeInToken: BN);
|
|
24
28
|
protected constructor(obj: any);
|
|
25
29
|
serialize(): any;
|
|
@@ -23,6 +23,10 @@ class SwapHandlerSwap extends base_1.Lockable {
|
|
|
23
23
|
this.state = obj.state;
|
|
24
24
|
this.swapFee = (0, Utils_1.deserializeBN)(obj.swapFee);
|
|
25
25
|
this.swapFeeInToken = (0, Utils_1.deserializeBN)(obj.swapFeeInToken);
|
|
26
|
+
this.prefix = obj.prefix;
|
|
27
|
+
this.timeout = obj.timeout;
|
|
28
|
+
this.signature = obj.signature;
|
|
29
|
+
this.feeRate = obj.feeRate;
|
|
26
30
|
}
|
|
27
31
|
}
|
|
28
32
|
serialize() {
|
|
@@ -33,7 +37,11 @@ class SwapHandlerSwap extends base_1.Lockable {
|
|
|
33
37
|
metadata: this.metadata,
|
|
34
38
|
txIds: this.txIds,
|
|
35
39
|
swapFee: (0, Utils_1.serializeBN)(this.swapFee),
|
|
36
|
-
swapFeeInToken: (0, Utils_1.serializeBN)(this.swapFeeInToken)
|
|
40
|
+
swapFeeInToken: (0, Utils_1.serializeBN)(this.swapFeeInToken),
|
|
41
|
+
prefix: this.prefix,
|
|
42
|
+
timeout: this.timeout,
|
|
43
|
+
signature: this.signature,
|
|
44
|
+
feeRate: this.feeRate
|
|
37
45
|
};
|
|
38
46
|
}
|
|
39
47
|
/**
|
|
@@ -2,11 +2,12 @@ import { SwapHandlerSwap } from "./SwapHandlerSwap";
|
|
|
2
2
|
import { SwapData } from "@atomiqlabs/base";
|
|
3
3
|
import * as BN from "bn.js";
|
|
4
4
|
export declare abstract class ToBtcBaseSwap<T extends SwapData = SwapData, S = any> extends SwapHandlerSwap<T, S> {
|
|
5
|
+
amount: BN;
|
|
5
6
|
quotedNetworkFee: BN;
|
|
6
7
|
readonly quotedNetworkFeeInToken: BN;
|
|
7
8
|
realNetworkFee: BN;
|
|
8
9
|
realNetworkFeeInToken: BN;
|
|
9
|
-
protected constructor(chainIdentifier: string, swapFee: BN, swapFeeInToken: BN, quotedNetworkFee: BN, quotedNetworkFeeInToken: BN);
|
|
10
|
+
protected constructor(chainIdentifier: string, amount: BN, swapFee: BN, swapFeeInToken: BN, quotedNetworkFee: BN, quotedNetworkFeeInToken: BN);
|
|
10
11
|
protected constructor(obj: any);
|
|
11
12
|
serialize(): any;
|
|
12
13
|
setRealNetworkFee(networkFeeInBtc: BN): void;
|
|
@@ -32,4 +33,5 @@ export declare abstract class ToBtcBaseSwap<T extends SwapData = SwapData, S = a
|
|
|
32
33
|
inInputToken: BN;
|
|
33
34
|
inOutputToken: BN;
|
|
34
35
|
};
|
|
36
|
+
getOutputAmount(): BN;
|
|
35
37
|
}
|
|
@@ -5,15 +5,17 @@ const SwapHandlerSwap_1 = require("./SwapHandlerSwap");
|
|
|
5
5
|
const BN = require("bn.js");
|
|
6
6
|
const Utils_1 = require("../utils/Utils");
|
|
7
7
|
class ToBtcBaseSwap extends SwapHandlerSwap_1.SwapHandlerSwap {
|
|
8
|
-
constructor(obj, swapFee, swapFeeInToken, quotedNetworkFee, quotedNetworkFeeInToken) {
|
|
9
|
-
if (typeof (obj) === "string" && BN.isBN(swapFee) && BN.isBN(swapFeeInToken) && BN.isBN(quotedNetworkFee) && BN.isBN(quotedNetworkFeeInToken)) {
|
|
8
|
+
constructor(obj, amount, swapFee, swapFeeInToken, quotedNetworkFee, quotedNetworkFeeInToken) {
|
|
9
|
+
if (typeof (obj) === "string" && BN.isBN(amount) && BN.isBN(swapFee) && BN.isBN(swapFeeInToken) && BN.isBN(quotedNetworkFee) && BN.isBN(quotedNetworkFeeInToken)) {
|
|
10
10
|
super(obj, swapFee, swapFeeInToken);
|
|
11
|
+
this.amount = amount;
|
|
11
12
|
this.quotedNetworkFee = quotedNetworkFee;
|
|
12
13
|
this.quotedNetworkFeeInToken = quotedNetworkFeeInToken;
|
|
13
14
|
return;
|
|
14
15
|
}
|
|
15
16
|
else {
|
|
16
17
|
super(obj);
|
|
18
|
+
this.amount = (0, Utils_1.deserializeBN)(obj.amount);
|
|
17
19
|
this.quotedNetworkFee = (0, Utils_1.deserializeBN)(obj.quotedNetworkFee);
|
|
18
20
|
this.quotedNetworkFeeInToken = (0, Utils_1.deserializeBN)(obj.quotedNetworkFeeInToken);
|
|
19
21
|
this.realNetworkFee = (0, Utils_1.deserializeBN)(obj.realNetworkFee);
|
|
@@ -22,6 +24,7 @@ class ToBtcBaseSwap extends SwapHandlerSwap_1.SwapHandlerSwap {
|
|
|
22
24
|
}
|
|
23
25
|
serialize() {
|
|
24
26
|
const obj = super.serialize();
|
|
27
|
+
obj.amount = (0, Utils_1.serializeBN)(this.amount);
|
|
25
28
|
obj.quotedNetworkFee = (0, Utils_1.serializeBN)(this.quotedNetworkFee);
|
|
26
29
|
obj.quotedNetworkFeeInToken = (0, Utils_1.serializeBN)(this.quotedNetworkFeeInToken);
|
|
27
30
|
obj.realNetworkFee = (0, Utils_1.serializeBN)(this.realNetworkFee);
|
|
@@ -57,5 +60,8 @@ class ToBtcBaseSwap extends SwapHandlerSwap_1.SwapHandlerSwap {
|
|
|
57
60
|
getRealNetworkFee() {
|
|
58
61
|
return { inInputToken: this.realNetworkFeeInToken, inOutputToken: this.realNetworkFee };
|
|
59
62
|
}
|
|
63
|
+
getOutputAmount() {
|
|
64
|
+
return this.amount;
|
|
65
|
+
}
|
|
60
66
|
}
|
|
61
67
|
exports.ToBtcBaseSwap = ToBtcBaseSwap;
|
|
@@ -226,7 +226,7 @@ class ToBtcBaseSwapHandler extends SwapHandler_1.SwapHandler {
|
|
|
226
226
|
const { swapContract, signer } = this.getChain(chainIdentifier);
|
|
227
227
|
const sigData = yield swapContract.getInitSignature(signer, swapObject, this.config.authorizationTimeout, prefetchedSignData, feeRate);
|
|
228
228
|
abortSignal.throwIfAborted();
|
|
229
|
-
return sigData;
|
|
229
|
+
return Object.assign(Object.assign({}, sigData), { feeRate });
|
|
230
230
|
});
|
|
231
231
|
}
|
|
232
232
|
}
|
|
@@ -4,12 +4,10 @@ import { FromBtcSwapAbs, FromBtcSwapState } from "./FromBtcSwapAbs";
|
|
|
4
4
|
import { MultichainData, SwapHandlerType } from "../SwapHandler";
|
|
5
5
|
import { ISwapPrice } from "../ISwapPrice";
|
|
6
6
|
import { ClaimEvent, InitializeEvent, RefundEvent, SwapData } from "@atomiqlabs/base";
|
|
7
|
-
import { AuthenticatedLnd } from "lightning";
|
|
8
|
-
import * as bitcoin from "bitcoinjs-lib";
|
|
9
7
|
import { IIntermediaryStorage } from "../../storage/IIntermediaryStorage";
|
|
10
8
|
import { FromBtcBaseConfig, FromBtcBaseSwapHandler } from "../FromBtcBaseSwapHandler";
|
|
9
|
+
import { IBitcoinWallet } from "../../wallets/IBitcoinWallet";
|
|
11
10
|
export type FromBtcConfig = FromBtcBaseConfig & {
|
|
12
|
-
bitcoinNetwork: bitcoin.networks.Network;
|
|
13
11
|
confirmations: number;
|
|
14
12
|
swapCsvDelta: number;
|
|
15
13
|
};
|
|
@@ -28,13 +26,13 @@ export declare class FromBtcAbs extends FromBtcBaseSwapHandler<FromBtcSwapAbs, F
|
|
|
28
26
|
readonly config: FromBtcConfig & {
|
|
29
27
|
swapTsCsvDelta: BN;
|
|
30
28
|
};
|
|
31
|
-
|
|
29
|
+
readonly bitcoin: IBitcoinWallet;
|
|
30
|
+
constructor(storageDirectory: IIntermediaryStorage<FromBtcSwapAbs>, path: string, chains: MultichainData, bitcoin: IBitcoinWallet, swapPricing: ISwapPrice, config: FromBtcConfig);
|
|
32
31
|
/**
|
|
33
32
|
* Returns the TXO hash of the specific address and amount - sha256(u64le(amount) + outputScript(address))
|
|
34
33
|
*
|
|
35
34
|
* @param address
|
|
36
35
|
* @param amount
|
|
37
|
-
* @param bitcoinNetwork
|
|
38
36
|
*/
|
|
39
37
|
private getTxoHash;
|
|
40
38
|
/**
|