@atomiqlabs/lp-lib 10.3.11
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/LICENSE +201 -0
- package/dist/fees/IBtcFeeEstimator.d.ts +3 -0
- package/dist/fees/IBtcFeeEstimator.js +2 -0
- package/dist/fees/OneDollarFeeEstimator.d.ts +16 -0
- package/dist/fees/OneDollarFeeEstimator.js +71 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +52 -0
- package/dist/info/InfoHandler.d.ts +17 -0
- package/dist/info/InfoHandler.js +70 -0
- package/dist/plugins/IPlugin.d.ts +118 -0
- package/dist/plugins/IPlugin.js +33 -0
- package/dist/plugins/PluginManager.d.ts +89 -0
- package/dist/plugins/PluginManager.js +263 -0
- package/dist/prices/BinanceSwapPrice.d.ts +27 -0
- package/dist/prices/BinanceSwapPrice.js +106 -0
- package/dist/prices/CoinGeckoSwapPrice.d.ts +31 -0
- package/dist/prices/CoinGeckoSwapPrice.js +76 -0
- package/dist/storage/IIntermediaryStorage.d.ts +15 -0
- package/dist/storage/IIntermediaryStorage.js +2 -0
- package/dist/storagemanager/IntermediaryStorageManager.d.ts +15 -0
- package/dist/storagemanager/IntermediaryStorageManager.js +113 -0
- package/dist/storagemanager/StorageManager.d.ts +12 -0
- package/dist/storagemanager/StorageManager.js +74 -0
- package/dist/swaps/FromBtcBaseSwap.d.ts +12 -0
- package/dist/swaps/FromBtcBaseSwap.js +16 -0
- package/dist/swaps/FromBtcBaseSwapHandler.d.ts +118 -0
- package/dist/swaps/FromBtcBaseSwapHandler.js +294 -0
- package/dist/swaps/FromBtcLnBaseSwapHandler.d.ts +25 -0
- package/dist/swaps/FromBtcLnBaseSwapHandler.js +55 -0
- package/dist/swaps/ISwapPrice.d.ts +44 -0
- package/dist/swaps/ISwapPrice.js +73 -0
- package/dist/swaps/SwapHandler.d.ts +186 -0
- package/dist/swaps/SwapHandler.js +292 -0
- package/dist/swaps/SwapHandlerSwap.d.ts +75 -0
- package/dist/swaps/SwapHandlerSwap.js +72 -0
- package/dist/swaps/ToBtcBaseSwap.d.ts +35 -0
- package/dist/swaps/ToBtcBaseSwap.js +61 -0
- package/dist/swaps/ToBtcBaseSwapHandler.d.ts +94 -0
- package/dist/swaps/ToBtcBaseSwapHandler.js +233 -0
- package/dist/swaps/frombtc_abstract/FromBtcAbs.d.ts +92 -0
- package/dist/swaps/frombtc_abstract/FromBtcAbs.js +386 -0
- package/dist/swaps/frombtc_abstract/FromBtcSwapAbs.d.ts +26 -0
- package/dist/swaps/frombtc_abstract/FromBtcSwapAbs.js +63 -0
- package/dist/swaps/frombtc_trusted/FromBtcTrusted.d.ts +55 -0
- package/dist/swaps/frombtc_trusted/FromBtcTrusted.js +586 -0
- package/dist/swaps/frombtc_trusted/FromBtcTrustedSwap.d.ts +43 -0
- package/dist/swaps/frombtc_trusted/FromBtcTrustedSwap.js +99 -0
- package/dist/swaps/frombtcln_abstract/FromBtcLnAbs.d.ts +105 -0
- package/dist/swaps/frombtcln_abstract/FromBtcLnAbs.js +731 -0
- package/dist/swaps/frombtcln_abstract/FromBtcLnSwapAbs.d.ts +29 -0
- package/dist/swaps/frombtcln_abstract/FromBtcLnSwapAbs.js +64 -0
- package/dist/swaps/frombtcln_trusted/FromBtcLnTrusted.d.ts +79 -0
- package/dist/swaps/frombtcln_trusted/FromBtcLnTrusted.js +514 -0
- package/dist/swaps/frombtcln_trusted/FromBtcLnTrustedSwap.d.ts +28 -0
- package/dist/swaps/frombtcln_trusted/FromBtcLnTrustedSwap.js +66 -0
- package/dist/swaps/tobtc_abstract/ToBtcAbs.d.ts +290 -0
- package/dist/swaps/tobtc_abstract/ToBtcAbs.js +1056 -0
- package/dist/swaps/tobtc_abstract/ToBtcSwapAbs.d.ts +29 -0
- package/dist/swaps/tobtc_abstract/ToBtcSwapAbs.js +70 -0
- package/dist/swaps/tobtcln_abstract/ToBtcLnAbs.d.ts +246 -0
- package/dist/swaps/tobtcln_abstract/ToBtcLnAbs.js +1169 -0
- package/dist/swaps/tobtcln_abstract/ToBtcLnSwapAbs.d.ts +27 -0
- package/dist/swaps/tobtcln_abstract/ToBtcLnSwapAbs.js +65 -0
- package/dist/utils/Utils.d.ts +32 -0
- package/dist/utils/Utils.js +109 -0
- package/dist/utils/coinselect2/accumulative.d.ts +6 -0
- package/dist/utils/coinselect2/accumulative.js +44 -0
- package/dist/utils/coinselect2/blackjack.d.ts +6 -0
- package/dist/utils/coinselect2/blackjack.js +41 -0
- package/dist/utils/coinselect2/index.d.ts +16 -0
- package/dist/utils/coinselect2/index.js +40 -0
- package/dist/utils/coinselect2/utils.d.ts +64 -0
- package/dist/utils/coinselect2/utils.js +121 -0
- package/dist/utils/paramcoders/IParamReader.d.ts +5 -0
- package/dist/utils/paramcoders/IParamReader.js +2 -0
- package/dist/utils/paramcoders/IParamWriter.d.ts +4 -0
- package/dist/utils/paramcoders/IParamWriter.js +2 -0
- package/dist/utils/paramcoders/LegacyParamEncoder.d.ts +10 -0
- package/dist/utils/paramcoders/LegacyParamEncoder.js +33 -0
- package/dist/utils/paramcoders/ParamDecoder.d.ts +25 -0
- package/dist/utils/paramcoders/ParamDecoder.js +234 -0
- package/dist/utils/paramcoders/ParamEncoder.d.ts +9 -0
- package/dist/utils/paramcoders/ParamEncoder.js +22 -0
- package/dist/utils/paramcoders/SchemaVerifier.d.ts +22 -0
- package/dist/utils/paramcoders/SchemaVerifier.js +85 -0
- package/dist/utils/paramcoders/server/ServerParamDecoder.d.ts +8 -0
- package/dist/utils/paramcoders/server/ServerParamDecoder.js +105 -0
- package/dist/utils/paramcoders/server/ServerParamEncoder.d.ts +11 -0
- package/dist/utils/paramcoders/server/ServerParamEncoder.js +76 -0
- package/package.json +43 -0
- package/src/fees/IBtcFeeEstimator.ts +7 -0
- package/src/fees/OneDollarFeeEstimator.ts +95 -0
- package/src/index.ts +46 -0
- package/src/info/InfoHandler.ts +106 -0
- package/src/plugins/IPlugin.ts +155 -0
- package/src/plugins/PluginManager.ts +310 -0
- package/src/prices/BinanceSwapPrice.ts +114 -0
- package/src/prices/CoinGeckoSwapPrice.ts +88 -0
- package/src/storage/IIntermediaryStorage.ts +21 -0
- package/src/storagemanager/IntermediaryStorageManager.ts +101 -0
- package/src/storagemanager/StorageManager.ts +68 -0
- package/src/swaps/FromBtcBaseSwap.ts +21 -0
- package/src/swaps/FromBtcBaseSwapHandler.ts +375 -0
- package/src/swaps/FromBtcLnBaseSwapHandler.ts +48 -0
- package/src/swaps/ISwapPrice.ts +94 -0
- package/src/swaps/SwapHandler.ts +404 -0
- package/src/swaps/SwapHandlerSwap.ts +133 -0
- package/src/swaps/ToBtcBaseSwap.ts +76 -0
- package/src/swaps/ToBtcBaseSwapHandler.ts +309 -0
- package/src/swaps/frombtc_abstract/FromBtcAbs.ts +484 -0
- package/src/swaps/frombtc_abstract/FromBtcSwapAbs.ts +77 -0
- package/src/swaps/frombtc_trusted/FromBtcTrusted.ts +661 -0
- package/src/swaps/frombtc_trusted/FromBtcTrustedSwap.ts +158 -0
- package/src/swaps/frombtcln_abstract/FromBtcLnAbs.ts +864 -0
- package/src/swaps/frombtcln_abstract/FromBtcLnSwapAbs.ts +82 -0
- package/src/swaps/frombtcln_trusted/FromBtcLnTrusted.ts +592 -0
- package/src/swaps/frombtcln_trusted/FromBtcLnTrustedSwap.ts +90 -0
- package/src/swaps/tobtc_abstract/ToBtcAbs.ts +1249 -0
- package/src/swaps/tobtc_abstract/ToBtcSwapAbs.ts +112 -0
- package/src/swaps/tobtcln_abstract/ToBtcLnAbs.ts +1422 -0
- package/src/swaps/tobtcln_abstract/ToBtcLnSwapAbs.ts +87 -0
- package/src/utils/Utils.ts +108 -0
- package/src/utils/coinselect2/accumulative.js +32 -0
- package/src/utils/coinselect2/accumulative.ts +58 -0
- package/src/utils/coinselect2/blackjack.js +29 -0
- package/src/utils/coinselect2/blackjack.ts +54 -0
- package/src/utils/coinselect2/index.js +16 -0
- package/src/utils/coinselect2/index.ts +50 -0
- package/src/utils/coinselect2/utils.js +110 -0
- package/src/utils/coinselect2/utils.ts +183 -0
- package/src/utils/paramcoders/IParamReader.ts +8 -0
- package/src/utils/paramcoders/IParamWriter.ts +8 -0
- package/src/utils/paramcoders/LegacyParamEncoder.ts +28 -0
- package/src/utils/paramcoders/ParamDecoder.ts +219 -0
- package/src/utils/paramcoders/ParamEncoder.ts +30 -0
- package/src/utils/paramcoders/SchemaVerifier.ts +97 -0
- package/src/utils/paramcoders/server/ServerParamDecoder.ts +115 -0
- package/src/utils/paramcoders/server/ServerParamEncoder.ts +76 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import {RequestData, SwapBaseConfig, SwapHandler} from "./SwapHandler";
|
|
2
|
+
import {SwapHandlerSwap} from "./SwapHandlerSwap";
|
|
3
|
+
import {SwapData} from "@atomiqlabs/base";
|
|
4
|
+
import * as BN from "bn.js";
|
|
5
|
+
import {ServerParamEncoder} from "../utils/paramcoders/server/ServerParamEncoder";
|
|
6
|
+
import {IParamReader} from "../utils/paramcoders/IParamReader";
|
|
7
|
+
import {FieldTypeEnum} from "../utils/paramcoders/SchemaVerifier";
|
|
8
|
+
import {PluginManager} from "../plugins/PluginManager";
|
|
9
|
+
import {
|
|
10
|
+
isQuoteSetFees,
|
|
11
|
+
isToBtcPluginQuote
|
|
12
|
+
} from "../plugins/IPlugin";
|
|
13
|
+
import {ToBtcLnRequestType} from "./tobtcln_abstract/ToBtcLnAbs";
|
|
14
|
+
import {ToBtcRequestType} from "./tobtc_abstract/ToBtcAbs";
|
|
15
|
+
import {Request} from "express";
|
|
16
|
+
|
|
17
|
+
export type ToBtcBaseConfig = SwapBaseConfig & {
|
|
18
|
+
gracePeriod: BN
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export abstract class ToBtcBaseSwapHandler<V extends SwapHandlerSwap<SwapData, S>, S> extends SwapHandler<V, S> {
|
|
22
|
+
|
|
23
|
+
readonly pdaExistsForToken: {
|
|
24
|
+
[chainIdentifier: string]: {
|
|
25
|
+
[token: string]: boolean
|
|
26
|
+
}
|
|
27
|
+
} = {};
|
|
28
|
+
|
|
29
|
+
abstract config: ToBtcBaseConfig;
|
|
30
|
+
|
|
31
|
+
protected async checkVaultInitialized(chainIdentifier: string, token: string): Promise<void> {
|
|
32
|
+
if(!this.pdaExistsForToken[chainIdentifier] || !this.pdaExistsForToken[chainIdentifier][token]) {
|
|
33
|
+
this.logger.debug("checkVaultInitialized(): checking vault exists for chain: "+chainIdentifier+" token: "+token);
|
|
34
|
+
const {swapContract, signer} = this.getChain(chainIdentifier);
|
|
35
|
+
const reputation = await swapContract.getIntermediaryReputation(signer.getAddress(), token);
|
|
36
|
+
this.logger.debug("checkVaultInitialized(): vault state, chain: "+chainIdentifier+" token: "+token+" exists: "+(reputation!=null));
|
|
37
|
+
if(reputation!=null) {
|
|
38
|
+
if(this.pdaExistsForToken[chainIdentifier]==null) this.pdaExistsForToken[chainIdentifier] = {};
|
|
39
|
+
this.pdaExistsForToken[chainIdentifier][token] = true;
|
|
40
|
+
} else {
|
|
41
|
+
throw {
|
|
42
|
+
code: 20201,
|
|
43
|
+
msg: "Token not supported!"
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Checks minimums/maximums, calculates the fee & total amount
|
|
51
|
+
*
|
|
52
|
+
* @param request
|
|
53
|
+
* @param requestedAmount
|
|
54
|
+
* @param useToken
|
|
55
|
+
* @throws {DefinedRuntimeError} will throw an error if the amount is outside minimum/maximum bounds
|
|
56
|
+
*/
|
|
57
|
+
protected async preCheckAmounts(
|
|
58
|
+
request: RequestData<ToBtcLnRequestType | ToBtcRequestType>,
|
|
59
|
+
requestedAmount: {input: boolean, amount: BN},
|
|
60
|
+
useToken: string
|
|
61
|
+
): Promise<{baseFee: BN, feePPM: BN}> {
|
|
62
|
+
const res = await PluginManager.onHandlePreToBtcQuote(
|
|
63
|
+
request,
|
|
64
|
+
requestedAmount,
|
|
65
|
+
request.chainIdentifier,
|
|
66
|
+
useToken,
|
|
67
|
+
{minInBtc: this.config.min, maxInBtc: this.config.max},
|
|
68
|
+
{baseFeeInBtc: this.config.baseFee, feePPM: this.config.feePPM},
|
|
69
|
+
);
|
|
70
|
+
if(res!=null) {
|
|
71
|
+
this.handlePluginErrorResponses(res);
|
|
72
|
+
if(isQuoteSetFees(res)) {
|
|
73
|
+
return {
|
|
74
|
+
baseFee: res.baseFee || this.config.baseFee,
|
|
75
|
+
feePPM: res.feePPM || this.config.feePPM
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if(!requestedAmount.input) {
|
|
80
|
+
this.checkBtcAmountInBounds(requestedAmount.amount);
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
baseFee: this.config.baseFee,
|
|
84
|
+
feePPM: this.config.feePPM
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Checks minimums/maximums, calculates network fee (based on the callback passed), swap fee & total amount
|
|
90
|
+
*
|
|
91
|
+
* @param request
|
|
92
|
+
* @param requestedAmount
|
|
93
|
+
* @param fees
|
|
94
|
+
* @param useToken
|
|
95
|
+
* @param getNetworkFee
|
|
96
|
+
* @param signal
|
|
97
|
+
* @param pricePrefetchPromise
|
|
98
|
+
* @throws {DefinedRuntimeError} will throw an error if the amount is outside minimum/maximum bounds,
|
|
99
|
+
* or if we don't have enough funds (getNetworkFee callback throws)
|
|
100
|
+
*/
|
|
101
|
+
protected async checkToBtcAmount<T extends {networkFee: BN}>(
|
|
102
|
+
request: RequestData<ToBtcLnRequestType | ToBtcRequestType>,
|
|
103
|
+
requestedAmount: {input: boolean, amount: BN},
|
|
104
|
+
fees: {baseFee: BN, feePPM: BN},
|
|
105
|
+
useToken: string,
|
|
106
|
+
getNetworkFee: (amount: BN) => Promise<T>,
|
|
107
|
+
signal: AbortSignal,
|
|
108
|
+
pricePrefetchPromise?: Promise<BN>
|
|
109
|
+
): Promise<{
|
|
110
|
+
amountBD: BN,
|
|
111
|
+
networkFeeData: T,
|
|
112
|
+
swapFee: BN,
|
|
113
|
+
swapFeeInToken: BN,
|
|
114
|
+
networkFee: BN,
|
|
115
|
+
networkFeeInToken: BN,
|
|
116
|
+
totalInToken: BN
|
|
117
|
+
}> {
|
|
118
|
+
const chainIdentifier = request.chainIdentifier;
|
|
119
|
+
|
|
120
|
+
const res = await PluginManager.onHandlePostToBtcQuote<T>(
|
|
121
|
+
request,
|
|
122
|
+
requestedAmount,
|
|
123
|
+
request.chainIdentifier,
|
|
124
|
+
useToken,
|
|
125
|
+
{minInBtc: this.config.min, maxInBtc: this.config.max},
|
|
126
|
+
{baseFeeInBtc: fees.baseFee, feePPM: fees.feePPM, networkFeeGetter: getNetworkFee},
|
|
127
|
+
pricePrefetchPromise
|
|
128
|
+
);
|
|
129
|
+
signal.throwIfAborted();
|
|
130
|
+
if(res!=null) {
|
|
131
|
+
this.handlePluginErrorResponses(res);
|
|
132
|
+
if(isQuoteSetFees(res)) {
|
|
133
|
+
if(res.baseFee!=null) fees.baseFee = res.baseFee;
|
|
134
|
+
if(res.feePPM!=null) fees.feePPM = res.feePPM;
|
|
135
|
+
}
|
|
136
|
+
if(isToBtcPluginQuote(res)) {
|
|
137
|
+
if(requestedAmount.input) {
|
|
138
|
+
return {
|
|
139
|
+
amountBD: res.amount.amount,
|
|
140
|
+
swapFee: res.swapFee.inOutputTokens,
|
|
141
|
+
swapFeeInToken: res.swapFee.inInputTokens,
|
|
142
|
+
networkFee: res.networkFee.inOutputTokens,
|
|
143
|
+
networkFeeInToken: res.networkFee.inInputTokens,
|
|
144
|
+
networkFeeData: res.networkFeeData,
|
|
145
|
+
totalInToken: requestedAmount.amount
|
|
146
|
+
}
|
|
147
|
+
} else {
|
|
148
|
+
return {
|
|
149
|
+
amountBD: requestedAmount.amount,
|
|
150
|
+
swapFee: res.swapFee.inOutputTokens,
|
|
151
|
+
swapFeeInToken: res.swapFee.inInputTokens,
|
|
152
|
+
networkFee: res.networkFee.inOutputTokens,
|
|
153
|
+
networkFeeInToken: res.networkFee.inInputTokens,
|
|
154
|
+
networkFeeData: res.networkFeeData,
|
|
155
|
+
totalInToken: res.amount.amount.add(res.swapFee.inInputTokens).add(res.networkFee.inInputTokens)
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
let amountBD: BN;
|
|
162
|
+
let tooLow = false;
|
|
163
|
+
if(requestedAmount.input) {
|
|
164
|
+
amountBD = await this.swapPricing.getToBtcSwapAmount(requestedAmount.amount, useToken, chainIdentifier, null, pricePrefetchPromise);
|
|
165
|
+
signal.throwIfAborted();
|
|
166
|
+
|
|
167
|
+
//Decrease by base fee
|
|
168
|
+
amountBD = amountBD.sub(fees.baseFee);
|
|
169
|
+
|
|
170
|
+
//If it's already smaller than minimum, set it to minimum so we can calculate the network fee
|
|
171
|
+
if(amountBD.lt(this.config.min)) {
|
|
172
|
+
amountBD = this.config.min;
|
|
173
|
+
tooLow = true;
|
|
174
|
+
}
|
|
175
|
+
} else {
|
|
176
|
+
amountBD = requestedAmount.amount;
|
|
177
|
+
this.checkBtcAmountInBounds(amountBD);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const resp = await getNetworkFee(amountBD);
|
|
181
|
+
this.logger.debug("checkToBtcAmount(): network fee calculated, amount: "+amountBD.toString(10)+" fee: "+resp.networkFee.toString(10));
|
|
182
|
+
signal.throwIfAborted();
|
|
183
|
+
|
|
184
|
+
if(requestedAmount.input) {
|
|
185
|
+
//Decrease by network fee
|
|
186
|
+
amountBD = amountBD.sub(resp.networkFee);
|
|
187
|
+
|
|
188
|
+
//Decrease by percentage fee
|
|
189
|
+
amountBD = amountBD.mul(new BN(1000000)).div(fees.feePPM.add(new BN(1000000)));
|
|
190
|
+
|
|
191
|
+
const tooHigh = amountBD.gt(this.config.max.mul(new BN(105)).div(new BN(100)));
|
|
192
|
+
tooLow ||= amountBD.lt(this.config.min.mul(new BN(95)).div(new BN(100)));
|
|
193
|
+
if(tooLow || tooHigh) {
|
|
194
|
+
//Compute min/max
|
|
195
|
+
let adjustedMin = this.config.min.mul(fees.feePPM.add(new BN(1000000))).div(new BN(1000000));
|
|
196
|
+
let adjustedMax = this.config.max.mul(fees.feePPM.add(new BN(1000000))).div(new BN(1000000));
|
|
197
|
+
adjustedMin = adjustedMin.add(fees.baseFee).add(resp.networkFee);
|
|
198
|
+
adjustedMax = adjustedMax.add(fees.baseFee).add(resp.networkFee);
|
|
199
|
+
const minIn = await this.swapPricing.getFromBtcSwapAmount(
|
|
200
|
+
adjustedMin, useToken, chainIdentifier, null, pricePrefetchPromise
|
|
201
|
+
);
|
|
202
|
+
const maxIn = await this.swapPricing.getFromBtcSwapAmount(
|
|
203
|
+
adjustedMax, useToken, chainIdentifier, null, pricePrefetchPromise
|
|
204
|
+
);
|
|
205
|
+
throw {
|
|
206
|
+
code: tooLow ? 20003 : 2004,
|
|
207
|
+
msg: tooLow ? "Amount too low!" : "Amount too high!",
|
|
208
|
+
data: {
|
|
209
|
+
min: minIn.toString(10),
|
|
210
|
+
max: maxIn.toString(10)
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const swapFee = fees.baseFee.add(amountBD.mul(fees.feePPM).div(new BN(1000000)));
|
|
217
|
+
|
|
218
|
+
const networkFeeInToken = await this.swapPricing.getFromBtcSwapAmount(
|
|
219
|
+
resp.networkFee, useToken, chainIdentifier, true, pricePrefetchPromise
|
|
220
|
+
);
|
|
221
|
+
const swapFeeInToken = await this.swapPricing.getFromBtcSwapAmount(
|
|
222
|
+
swapFee, useToken, chainIdentifier, true, pricePrefetchPromise
|
|
223
|
+
);
|
|
224
|
+
signal.throwIfAborted();
|
|
225
|
+
|
|
226
|
+
let total: BN;
|
|
227
|
+
if(requestedAmount.input) {
|
|
228
|
+
total = requestedAmount.amount;
|
|
229
|
+
} else {
|
|
230
|
+
const amountInToken = await this.swapPricing.getFromBtcSwapAmount(
|
|
231
|
+
requestedAmount.amount, useToken, chainIdentifier, true, pricePrefetchPromise
|
|
232
|
+
);
|
|
233
|
+
signal.throwIfAborted();
|
|
234
|
+
total = amountInToken.add(swapFeeInToken).add(networkFeeInToken);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return {amountBD, networkFeeData: resp, swapFee, swapFeeInToken, networkFee: resp.networkFee, networkFeeInToken, totalInToken: total};
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Starts pre-fetches for swap pricing & signature data
|
|
242
|
+
*
|
|
243
|
+
* @param chainIdentifier
|
|
244
|
+
* @param token
|
|
245
|
+
* @param responseStream
|
|
246
|
+
* @param abortController
|
|
247
|
+
*/
|
|
248
|
+
protected getToBtcPrefetches(chainIdentifier: string, token: string, responseStream: ServerParamEncoder, abortController: AbortController): {
|
|
249
|
+
pricePrefetchPromise?: Promise<BN>,
|
|
250
|
+
signDataPrefetchPromise?: Promise<any>
|
|
251
|
+
} {
|
|
252
|
+
//Fetch pricing & signature data in parallel
|
|
253
|
+
const pricePrefetchPromise: Promise<BN> = this.swapPricing.preFetchPrice(token, chainIdentifier).catch(e => {
|
|
254
|
+
this.logger.error("getToBtcPrefetches(): pricePrefetch error", e);
|
|
255
|
+
abortController.abort(e);
|
|
256
|
+
return null;
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
return {
|
|
260
|
+
pricePrefetchPromise,
|
|
261
|
+
signDataPrefetchPromise: this.getSignDataPrefetch(chainIdentifier, abortController, responseStream)
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Signs the created swap
|
|
267
|
+
*
|
|
268
|
+
* @param chainIdentifier
|
|
269
|
+
* @param swapObject
|
|
270
|
+
* @param req
|
|
271
|
+
* @param abortSignal
|
|
272
|
+
* @param signDataPrefetchPromise
|
|
273
|
+
*/
|
|
274
|
+
protected async getToBtcSignatureData(
|
|
275
|
+
chainIdentifier: string,
|
|
276
|
+
swapObject: SwapData,
|
|
277
|
+
req: Request & {paramReader: IParamReader},
|
|
278
|
+
abortSignal: AbortSignal,
|
|
279
|
+
signDataPrefetchPromise?: Promise<any>
|
|
280
|
+
): Promise<{
|
|
281
|
+
prefix: string,
|
|
282
|
+
timeout: string,
|
|
283
|
+
signature: string
|
|
284
|
+
}> {
|
|
285
|
+
const prefetchedSignData = signDataPrefetchPromise!=null ? await signDataPrefetchPromise : null;
|
|
286
|
+
if(prefetchedSignData!=null) this.logger.debug("getToBtcSignatureData(): pre-fetched signature data: ", prefetchedSignData);
|
|
287
|
+
abortSignal.throwIfAborted();
|
|
288
|
+
|
|
289
|
+
const feeRateObj = await req.paramReader.getParams({
|
|
290
|
+
feeRate: FieldTypeEnum.String
|
|
291
|
+
}).catch(() => null);
|
|
292
|
+
abortSignal.throwIfAborted();
|
|
293
|
+
|
|
294
|
+
const feeRate = feeRateObj?.feeRate!=null && typeof(feeRateObj.feeRate)==="string" ? feeRateObj.feeRate : null;
|
|
295
|
+
this.logger.debug("getToBtcSignatureData(): using fee rate from client: ", feeRate);
|
|
296
|
+
const {swapContract, signer} = this.getChain(chainIdentifier);
|
|
297
|
+
const sigData = await swapContract.getInitSignature(
|
|
298
|
+
signer,
|
|
299
|
+
swapObject,
|
|
300
|
+
this.config.authorizationTimeout,
|
|
301
|
+
prefetchedSignData,
|
|
302
|
+
feeRate
|
|
303
|
+
);
|
|
304
|
+
abortSignal.throwIfAborted();
|
|
305
|
+
|
|
306
|
+
return sigData;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
}
|