@atomiqlabs/lp-lib 14.0.0-dev.21 → 14.0.0-dev.23
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 -201
- package/dist/fees/IBtcFeeEstimator.d.ts +3 -3
- package/dist/fees/IBtcFeeEstimator.js +2 -2
- package/dist/index.d.ts +42 -42
- package/dist/index.js +58 -58
- package/dist/info/InfoHandler.d.ts +17 -17
- package/dist/info/InfoHandler.js +61 -61
- package/dist/plugins/IPlugin.d.ts +143 -143
- package/dist/plugins/IPlugin.js +34 -34
- package/dist/plugins/PluginManager.d.ts +112 -112
- package/dist/plugins/PluginManager.js +259 -259
- package/dist/prices/BinanceSwapPrice.d.ts +26 -26
- package/dist/prices/BinanceSwapPrice.js +92 -92
- package/dist/prices/CoinGeckoSwapPrice.d.ts +30 -30
- package/dist/prices/CoinGeckoSwapPrice.js +64 -64
- package/dist/prices/ISwapPrice.d.ts +43 -43
- package/dist/prices/ISwapPrice.js +55 -55
- package/dist/prices/OKXSwapPrice.d.ts +26 -26
- package/dist/prices/OKXSwapPrice.js +92 -92
- package/dist/storage/IIntermediaryStorage.d.ts +18 -18
- package/dist/storage/IIntermediaryStorage.js +2 -2
- package/dist/storagemanager/IntermediaryStorageManager.d.ts +19 -19
- package/dist/storagemanager/IntermediaryStorageManager.js +111 -111
- package/dist/storagemanager/StorageManager.d.ts +13 -13
- package/dist/storagemanager/StorageManager.js +64 -64
- package/dist/swaps/SwapHandler.d.ts +153 -153
- package/dist/swaps/SwapHandler.js +160 -160
- package/dist/swaps/SwapHandlerSwap.d.ts +79 -79
- package/dist/swaps/SwapHandlerSwap.js +78 -78
- package/dist/swaps/assertions/AmountAssertions.d.ts +28 -28
- package/dist/swaps/assertions/AmountAssertions.js +72 -72
- package/dist/swaps/assertions/FromBtcAmountAssertions.d.ts +76 -76
- package/dist/swaps/assertions/FromBtcAmountAssertions.js +180 -180
- package/dist/swaps/assertions/LightningAssertions.d.ts +44 -44
- package/dist/swaps/assertions/LightningAssertions.js +86 -86
- package/dist/swaps/assertions/ToBtcAmountAssertions.d.ts +53 -53
- package/dist/swaps/assertions/ToBtcAmountAssertions.js +150 -150
- package/dist/swaps/escrow/EscrowHandler.d.ts +51 -51
- package/dist/swaps/escrow/EscrowHandler.js +158 -158
- package/dist/swaps/escrow/EscrowHandlerSwap.d.ts +35 -35
- package/dist/swaps/escrow/EscrowHandlerSwap.js +69 -69
- package/dist/swaps/escrow/FromBtcBaseSwap.d.ts +14 -14
- package/dist/swaps/escrow/FromBtcBaseSwap.js +32 -32
- package/dist/swaps/escrow/FromBtcBaseSwapHandler.d.ts +102 -102
- package/dist/swaps/escrow/FromBtcBaseSwapHandler.js +210 -210
- package/dist/swaps/escrow/ToBtcBaseSwap.d.ts +36 -36
- package/dist/swaps/escrow/ToBtcBaseSwap.js +67 -67
- package/dist/swaps/escrow/ToBtcBaseSwapHandler.d.ts +53 -53
- package/dist/swaps/escrow/ToBtcBaseSwapHandler.js +81 -81
- package/dist/swaps/escrow/frombtc_abstract/FromBtcAbs.d.ts +83 -83
- package/dist/swaps/escrow/frombtc_abstract/FromBtcAbs.js +318 -318
- package/dist/swaps/escrow/frombtc_abstract/FromBtcSwapAbs.d.ts +21 -21
- package/dist/swaps/escrow/frombtc_abstract/FromBtcSwapAbs.js +50 -50
- package/dist/swaps/escrow/frombtcln_abstract/FromBtcLnAbs.d.ts +107 -107
- package/dist/swaps/escrow/frombtcln_abstract/FromBtcLnAbs.js +675 -675
- package/dist/swaps/escrow/frombtcln_abstract/FromBtcLnSwapAbs.d.ts +33 -33
- package/dist/swaps/escrow/frombtcln_abstract/FromBtcLnSwapAbs.js +91 -91
- package/dist/swaps/escrow/frombtcln_autoinit/FromBtcLnAuto.d.ts +111 -111
- package/dist/swaps/escrow/frombtcln_autoinit/FromBtcLnAuto.js +684 -684
- package/dist/swaps/escrow/frombtcln_autoinit/FromBtcLnAutoSwap.d.ts +55 -55
- package/dist/swaps/escrow/frombtcln_autoinit/FromBtcLnAutoSwap.js +120 -120
- package/dist/swaps/escrow/tobtc_abstract/ToBtcAbs.d.ts +171 -171
- package/dist/swaps/escrow/tobtc_abstract/ToBtcAbs.js +706 -706
- package/dist/swaps/escrow/tobtc_abstract/ToBtcSwapAbs.d.ts +26 -26
- package/dist/swaps/escrow/tobtc_abstract/ToBtcSwapAbs.js +62 -62
- package/dist/swaps/escrow/tobtcln_abstract/ToBtcLnAbs.d.ts +177 -177
- package/dist/swaps/escrow/tobtcln_abstract/ToBtcLnAbs.js +863 -863
- package/dist/swaps/escrow/tobtcln_abstract/ToBtcLnSwapAbs.d.ts +24 -24
- package/dist/swaps/escrow/tobtcln_abstract/ToBtcLnSwapAbs.js +58 -58
- package/dist/swaps/spv_vault_swap/SpvVault.d.ts +40 -41
- package/dist/swaps/spv_vault_swap/SpvVault.js +111 -111
- package/dist/swaps/spv_vault_swap/SpvVaultSwap.d.ts +67 -67
- package/dist/swaps/spv_vault_swap/SpvVaultSwap.js +158 -158
- package/dist/swaps/spv_vault_swap/SpvVaultSwapHandler.d.ts +68 -68
- package/dist/swaps/spv_vault_swap/SpvVaultSwapHandler.js +492 -492
- package/dist/swaps/spv_vault_swap/SpvVaults.d.ts +52 -52
- package/dist/swaps/spv_vault_swap/SpvVaults.js +386 -364
- package/dist/swaps/trusted/frombtc_trusted/FromBtcTrusted.d.ts +51 -51
- package/dist/swaps/trusted/frombtc_trusted/FromBtcTrusted.js +650 -650
- package/dist/swaps/trusted/frombtc_trusted/FromBtcTrustedSwap.d.ts +52 -52
- package/dist/swaps/trusted/frombtc_trusted/FromBtcTrustedSwap.js +118 -118
- package/dist/swaps/trusted/frombtcln_trusted/FromBtcLnTrusted.d.ts +76 -76
- package/dist/swaps/trusted/frombtcln_trusted/FromBtcLnTrusted.js +494 -494
- package/dist/swaps/trusted/frombtcln_trusted/FromBtcLnTrustedSwap.d.ts +34 -34
- package/dist/swaps/trusted/frombtcln_trusted/FromBtcLnTrustedSwap.js +81 -81
- package/dist/utils/BitcoinUtils.d.ts +2 -2
- package/dist/utils/BitcoinUtils.js +45 -45
- package/dist/utils/Utils.d.ts +29 -29
- package/dist/utils/Utils.js +89 -89
- package/dist/utils/paramcoders/IParamReader.d.ts +5 -5
- package/dist/utils/paramcoders/IParamReader.js +2 -2
- package/dist/utils/paramcoders/IParamWriter.d.ts +4 -4
- package/dist/utils/paramcoders/IParamWriter.js +2 -2
- package/dist/utils/paramcoders/LegacyParamEncoder.d.ts +10 -10
- package/dist/utils/paramcoders/LegacyParamEncoder.js +22 -22
- package/dist/utils/paramcoders/ParamDecoder.d.ts +25 -25
- package/dist/utils/paramcoders/ParamDecoder.js +222 -222
- package/dist/utils/paramcoders/ParamEncoder.d.ts +9 -9
- package/dist/utils/paramcoders/ParamEncoder.js +22 -22
- package/dist/utils/paramcoders/SchemaVerifier.d.ts +21 -21
- package/dist/utils/paramcoders/SchemaVerifier.js +84 -84
- package/dist/utils/paramcoders/server/ServerParamDecoder.d.ts +8 -8
- package/dist/utils/paramcoders/server/ServerParamDecoder.js +107 -107
- package/dist/utils/paramcoders/server/ServerParamEncoder.d.ts +11 -11
- package/dist/utils/paramcoders/server/ServerParamEncoder.js +65 -65
- package/dist/wallets/IBitcoinWallet.d.ts +67 -67
- package/dist/wallets/IBitcoinWallet.js +2 -2
- package/dist/wallets/ILightningWallet.d.ts +117 -117
- package/dist/wallets/ILightningWallet.js +37 -37
- package/dist/wallets/ISpvVaultSigner.d.ts +7 -7
- package/dist/wallets/ISpvVaultSigner.js +2 -2
- package/package.json +36 -36
- package/src/fees/IBtcFeeEstimator.ts +6 -6
- package/src/index.ts +53 -53
- package/src/info/InfoHandler.ts +106 -106
- package/src/plugins/IPlugin.ts +168 -168
- package/src/plugins/PluginManager.ts +336 -336
- package/src/prices/BinanceSwapPrice.ts +113 -113
- package/src/prices/CoinGeckoSwapPrice.ts +87 -87
- package/src/prices/ISwapPrice.ts +88 -88
- package/src/prices/OKXSwapPrice.ts +113 -113
- package/src/storage/IIntermediaryStorage.ts +19 -19
- package/src/storagemanager/IntermediaryStorageManager.ts +118 -118
- package/src/storagemanager/StorageManager.ts +78 -78
- package/src/swaps/SwapHandler.ts +277 -277
- package/src/swaps/SwapHandlerSwap.ts +141 -141
- package/src/swaps/assertions/AmountAssertions.ts +76 -76
- package/src/swaps/assertions/FromBtcAmountAssertions.ts +246 -246
- package/src/swaps/assertions/LightningAssertions.ts +103 -103
- package/src/swaps/assertions/ToBtcAmountAssertions.ts +203 -203
- package/src/swaps/escrow/EscrowHandler.ts +179 -179
- package/src/swaps/escrow/EscrowHandlerSwap.ts +86 -86
- package/src/swaps/escrow/FromBtcBaseSwap.ts +38 -38
- package/src/swaps/escrow/FromBtcBaseSwapHandler.ts +286 -286
- package/src/swaps/escrow/ToBtcBaseSwap.ts +85 -85
- package/src/swaps/escrow/ToBtcBaseSwapHandler.ts +129 -129
- package/src/swaps/escrow/frombtc_abstract/FromBtcAbs.ts +452 -452
- package/src/swaps/escrow/frombtc_abstract/FromBtcSwapAbs.ts +61 -61
- package/src/swaps/escrow/frombtcln_abstract/FromBtcLnAbs.ts +856 -856
- package/src/swaps/escrow/frombtcln_abstract/FromBtcLnSwapAbs.ts +141 -141
- package/src/swaps/escrow/frombtcln_autoinit/FromBtcLnAuto.ts +850 -850
- package/src/swaps/escrow/frombtcln_autoinit/FromBtcLnAutoSwap.ts +196 -196
- package/src/swaps/escrow/tobtc_abstract/ToBtcAbs.ts +879 -879
- package/src/swaps/escrow/tobtc_abstract/ToBtcSwapAbs.ts +102 -102
- package/src/swaps/escrow/tobtcln_abstract/ToBtcLnAbs.ts +1112 -1112
- package/src/swaps/escrow/tobtcln_abstract/ToBtcLnSwapAbs.ts +80 -80
- package/src/swaps/spv_vault_swap/SpvVault.ts +143 -143
- package/src/swaps/spv_vault_swap/SpvVaultSwap.ts +225 -225
- package/src/swaps/spv_vault_swap/SpvVaultSwapHandler.ts +628 -628
- package/src/swaps/spv_vault_swap/SpvVaults.ts +458 -435
- package/src/swaps/trusted/frombtc_trusted/FromBtcTrusted.ts +747 -747
- package/src/swaps/trusted/frombtc_trusted/FromBtcTrustedSwap.ts +185 -185
- package/src/swaps/trusted/frombtcln_trusted/FromBtcLnTrusted.ts +590 -590
- package/src/swaps/trusted/frombtcln_trusted/FromBtcLnTrustedSwap.ts +121 -121
- package/src/utils/BitcoinUtils.ts +42 -42
- package/src/utils/Utils.ts +104 -104
- package/src/utils/paramcoders/IParamReader.ts +7 -7
- package/src/utils/paramcoders/IParamWriter.ts +8 -8
- package/src/utils/paramcoders/LegacyParamEncoder.ts +27 -27
- package/src/utils/paramcoders/ParamDecoder.ts +218 -218
- package/src/utils/paramcoders/ParamEncoder.ts +29 -29
- package/src/utils/paramcoders/SchemaVerifier.ts +96 -96
- package/src/utils/paramcoders/server/ServerParamDecoder.ts +118 -118
- package/src/utils/paramcoders/server/ServerParamEncoder.ts +75 -75
- package/src/wallets/IBitcoinWallet.ts +68 -68
- package/src/wallets/ILightningWallet.ts +178 -178
- package/src/wallets/ISpvVaultSigner.ts +10 -10
|
@@ -1,210 +1,210 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FromBtcBaseSwapHandler = void 0;
|
|
4
|
-
const SchemaVerifier_1 = require("../../utils/paramcoders/SchemaVerifier");
|
|
5
|
-
const EscrowHandler_1 = require("./EscrowHandler");
|
|
6
|
-
const FromBtcAmountAssertions_1 = require("../assertions/FromBtcAmountAssertions");
|
|
7
|
-
const secondsInYear = BigInt(365 * 24 * 60 * 60);
|
|
8
|
-
class FromBtcBaseSwapHandler extends EscrowHandler_1.EscrowHandler {
|
|
9
|
-
constructor(storageDirectory, path, chainsData, swapPricing, config) {
|
|
10
|
-
super(storageDirectory, path, chainsData, swapPricing);
|
|
11
|
-
this.AmountAssertions = new FromBtcAmountAssertions_1.FromBtcAmountAssertions(config, swapPricing);
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Starts a pre-fetch for swap price & security deposit price
|
|
15
|
-
*
|
|
16
|
-
* @param chainIdentifier
|
|
17
|
-
* @param useToken
|
|
18
|
-
* @param depositToken
|
|
19
|
-
* @param abortController
|
|
20
|
-
*/
|
|
21
|
-
getFromBtcPricePrefetches(chainIdentifier, useToken, depositToken, abortController) {
|
|
22
|
-
const pricePrefetchPromise = this.swapPricing.preFetchPrice(useToken, chainIdentifier).catch(e => {
|
|
23
|
-
this.logger.error("getFromBtcPricePrefetches(): pricePrefetch error: ", e);
|
|
24
|
-
abortController.abort(e);
|
|
25
|
-
return null;
|
|
26
|
-
});
|
|
27
|
-
const { chainInterface } = this.getChain(chainIdentifier);
|
|
28
|
-
const gasTokenPricePrefetchPromise = useToken.toString() === chainInterface.getNativeCurrencyAddress().toString() ?
|
|
29
|
-
pricePrefetchPromise :
|
|
30
|
-
this.swapPricing.preFetchPrice(chainInterface.getNativeCurrencyAddress(), chainIdentifier).catch(e => {
|
|
31
|
-
this.logger.error("getFromBtcPricePrefetches(): gasTokenPricePrefetchPromise error: ", e);
|
|
32
|
-
abortController.abort(e);
|
|
33
|
-
return null;
|
|
34
|
-
});
|
|
35
|
-
const depositTokenPricePrefetchPromise = depositToken === chainInterface.getNativeCurrencyAddress() ?
|
|
36
|
-
gasTokenPricePrefetchPromise :
|
|
37
|
-
this.swapPricing.preFetchPrice(depositToken, chainIdentifier).catch(e => {
|
|
38
|
-
this.logger.error("getFromBtcPricePrefetches(): depositTokenPricePrefetchPromise error: ", e);
|
|
39
|
-
abortController.abort(e);
|
|
40
|
-
return null;
|
|
41
|
-
});
|
|
42
|
-
return { pricePrefetchPromise, gasTokenPricePrefetchPromise, depositTokenPricePrefetchPromise };
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Starts a pre-fetch for base security deposit (transaction fee for refunding transaction on our side)
|
|
46
|
-
*
|
|
47
|
-
* @param chainIdentifier
|
|
48
|
-
* @param dummySwapData
|
|
49
|
-
* @param depositToken
|
|
50
|
-
* @param gasTokenPricePrefetchPromise
|
|
51
|
-
* @param depositTokenPricePrefetchPromise
|
|
52
|
-
* @param abortController
|
|
53
|
-
*/
|
|
54
|
-
async getBaseSecurityDepositPrefetch(chainIdentifier, dummySwapData, depositToken, gasTokenPricePrefetchPromise, depositTokenPricePrefetchPromise, abortController) {
|
|
55
|
-
//Solana workaround
|
|
56
|
-
const { swapContract, chainInterface, signer } = this.getChain(chainIdentifier);
|
|
57
|
-
let feeResult;
|
|
58
|
-
const gasToken = chainInterface.getNativeCurrencyAddress();
|
|
59
|
-
if (swapContract.getRawRefundFee != null) {
|
|
60
|
-
try {
|
|
61
|
-
feeResult = await swapContract.getRawRefundFee(signer.getAddress(), dummySwapData);
|
|
62
|
-
}
|
|
63
|
-
catch (e) {
|
|
64
|
-
this.logger.error("getBaseSecurityDepositPrefetch(): pre-fetch error: ", e);
|
|
65
|
-
abortController.abort(e);
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
try {
|
|
71
|
-
feeResult = await swapContract.getRefundFee(signer.getAddress(), dummySwapData);
|
|
72
|
-
}
|
|
73
|
-
catch (e1) {
|
|
74
|
-
this.logger.error("getBaseSecurityDepositPrefetch(): pre-fetch error: ", e1);
|
|
75
|
-
abortController.abort(e1);
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
feeResult = feeResult * 2n;
|
|
80
|
-
if (gasToken === depositToken)
|
|
81
|
-
return feeResult;
|
|
82
|
-
const btcValue = await this.swapPricing.getToBtcSwapAmount(feeResult, gasToken, chainIdentifier, true, gasTokenPricePrefetchPromise);
|
|
83
|
-
return await this.swapPricing.getFromBtcSwapAmount(btcValue, depositToken, chainIdentifier, true, depositTokenPricePrefetchPromise);
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Starts a pre-fetch for vault balance
|
|
87
|
-
*
|
|
88
|
-
* @param chainIdentifier
|
|
89
|
-
* @param useToken
|
|
90
|
-
* @param abortController
|
|
91
|
-
* @param inContract
|
|
92
|
-
*/
|
|
93
|
-
async getBalancePrefetch(chainIdentifier, useToken, abortController, inContract = true) {
|
|
94
|
-
const { swapContract, signer } = this.getChain(chainIdentifier);
|
|
95
|
-
try {
|
|
96
|
-
return await swapContract.getBalance(signer.getAddress(), useToken, inContract);
|
|
97
|
-
}
|
|
98
|
-
catch (e) {
|
|
99
|
-
this.logger.error("getBalancePrefetch(): balancePrefetch error: ", e);
|
|
100
|
-
abortController.abort(e);
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Checks if we have enough balance of the token in the swap vault
|
|
106
|
-
*
|
|
107
|
-
* @param totalInToken
|
|
108
|
-
* @param balancePrefetch
|
|
109
|
-
* @param signal
|
|
110
|
-
* @throws {DefinedRuntimeError} will throw an error if there are not enough funds in the vault
|
|
111
|
-
*/
|
|
112
|
-
async checkBalance(totalInToken, balancePrefetch, signal) {
|
|
113
|
-
if (totalInToken === 0n)
|
|
114
|
-
return;
|
|
115
|
-
const balance = await balancePrefetch;
|
|
116
|
-
if (signal != null)
|
|
117
|
-
signal.throwIfAborted();
|
|
118
|
-
if (balance == null || balance < totalInToken) {
|
|
119
|
-
throw {
|
|
120
|
-
code: 20002,
|
|
121
|
-
msg: "Not enough liquidity"
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Checks if the specified token is allowed as a deposit token
|
|
127
|
-
*
|
|
128
|
-
* @param chainIdentifier
|
|
129
|
-
* @param depositToken
|
|
130
|
-
* @throws {DefinedRuntimeError} will throw an error if there are not enough funds in the vault
|
|
131
|
-
*/
|
|
132
|
-
checkAllowedDepositToken(chainIdentifier, depositToken) {
|
|
133
|
-
const { chainInterface, allowedDepositTokens } = this.getChain(chainIdentifier);
|
|
134
|
-
if (allowedDepositTokens == null) {
|
|
135
|
-
if (depositToken !== chainInterface.getNativeCurrencyAddress())
|
|
136
|
-
throw {
|
|
137
|
-
code: 20190,
|
|
138
|
-
msg: "Unsupported deposit token"
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
if (!allowedDepositTokens.includes(depositToken))
|
|
143
|
-
throw {
|
|
144
|
-
code: 20190,
|
|
145
|
-
msg: "Unsupported deposit token"
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Signs the created swap
|
|
151
|
-
*
|
|
152
|
-
* @param chainIdentifier
|
|
153
|
-
* @param swapObject
|
|
154
|
-
* @param req
|
|
155
|
-
* @param abortSignal
|
|
156
|
-
* @param signDataPrefetchPromise
|
|
157
|
-
*/
|
|
158
|
-
async getFromBtcSignatureData(chainIdentifier, swapObject, req, abortSignal, signDataPrefetchPromise) {
|
|
159
|
-
const { swapContract, signer } = this.getChain(chainIdentifier);
|
|
160
|
-
const prefetchedSignData = signDataPrefetchPromise != null ? await signDataPrefetchPromise : null;
|
|
161
|
-
if (prefetchedSignData != null)
|
|
162
|
-
this.logger.debug("getFromBtcSignatureData(): pre-fetched signature data: ", prefetchedSignData);
|
|
163
|
-
abortSignal.throwIfAborted();
|
|
164
|
-
const feeRateObj = await req.paramReader.getParams({
|
|
165
|
-
feeRate: SchemaVerifier_1.FieldTypeEnum.String
|
|
166
|
-
}).catch(() => null);
|
|
167
|
-
abortSignal.throwIfAborted();
|
|
168
|
-
const feeRate = feeRateObj?.feeRate != null && typeof (feeRateObj.feeRate) === "string" ? feeRateObj.feeRate : null;
|
|
169
|
-
this.logger.debug("getFromBtcSignatureData(): using fee rate from client: ", feeRate);
|
|
170
|
-
const sigData = await swapContract.getInitSignature(signer, swapObject, this.getInitAuthorizationTimeout(chainIdentifier), prefetchedSignData, feeRate);
|
|
171
|
-
abortSignal.throwIfAborted();
|
|
172
|
-
return {
|
|
173
|
-
...sigData,
|
|
174
|
-
feeRate
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Calculates the required security deposit
|
|
179
|
-
*
|
|
180
|
-
* @param chainIdentifier
|
|
181
|
-
* @param amountBD
|
|
182
|
-
* @param swapFee
|
|
183
|
-
* @param expiryTimeout
|
|
184
|
-
* @param baseSecurityDepositPromise
|
|
185
|
-
* @param depositToken
|
|
186
|
-
* @param depositTokenPricePrefetchPromise
|
|
187
|
-
* @param securityDepositData
|
|
188
|
-
* @param signal
|
|
189
|
-
* @param metadata
|
|
190
|
-
*/
|
|
191
|
-
async getSecurityDeposit(chainIdentifier, amountBD, swapFee, expiryTimeout, baseSecurityDepositPromise, depositToken, depositTokenPricePrefetchPromise, securityDepositData, signal, metadata) {
|
|
192
|
-
let baseSD = await baseSecurityDepositPromise;
|
|
193
|
-
if (securityDepositData.securityDepositBaseMultiplierPPM != null)
|
|
194
|
-
baseSD = baseSD * securityDepositData.securityDepositBaseMultiplierPPM / 1000000n;
|
|
195
|
-
signal.throwIfAborted();
|
|
196
|
-
metadata.times.refundFeeFetched = Date.now();
|
|
197
|
-
const swapValueInDepositToken = await this.swapPricing.getFromBtcSwapAmount(amountBD - swapFee, depositToken, chainIdentifier, true, depositTokenPricePrefetchPromise);
|
|
198
|
-
signal.throwIfAborted();
|
|
199
|
-
const apyPPM = securityDepositData.securityDepositApyPPM ?? BigInt(Math.floor(this.config.securityDepositAPY * 1000000));
|
|
200
|
-
const variableSD = swapValueInDepositToken * apyPPM * expiryTimeout / 1000000n / secondsInYear;
|
|
201
|
-
this.logger.debug("getSecurityDeposit(): base security deposit: " + baseSD.toString(10) +
|
|
202
|
-
" deposit token: " + depositToken +
|
|
203
|
-
" swap output in deposit token: " + swapValueInDepositToken.toString(10) +
|
|
204
|
-
" apy ppm: " + apyPPM.toString(10) +
|
|
205
|
-
" expiry timeout: " + expiryTimeout.toString(10) +
|
|
206
|
-
" variable security deposit: " + variableSD.toString(10));
|
|
207
|
-
return baseSD + variableSD;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
exports.FromBtcBaseSwapHandler = FromBtcBaseSwapHandler;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FromBtcBaseSwapHandler = void 0;
|
|
4
|
+
const SchemaVerifier_1 = require("../../utils/paramcoders/SchemaVerifier");
|
|
5
|
+
const EscrowHandler_1 = require("./EscrowHandler");
|
|
6
|
+
const FromBtcAmountAssertions_1 = require("../assertions/FromBtcAmountAssertions");
|
|
7
|
+
const secondsInYear = BigInt(365 * 24 * 60 * 60);
|
|
8
|
+
class FromBtcBaseSwapHandler extends EscrowHandler_1.EscrowHandler {
|
|
9
|
+
constructor(storageDirectory, path, chainsData, swapPricing, config) {
|
|
10
|
+
super(storageDirectory, path, chainsData, swapPricing);
|
|
11
|
+
this.AmountAssertions = new FromBtcAmountAssertions_1.FromBtcAmountAssertions(config, swapPricing);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Starts a pre-fetch for swap price & security deposit price
|
|
15
|
+
*
|
|
16
|
+
* @param chainIdentifier
|
|
17
|
+
* @param useToken
|
|
18
|
+
* @param depositToken
|
|
19
|
+
* @param abortController
|
|
20
|
+
*/
|
|
21
|
+
getFromBtcPricePrefetches(chainIdentifier, useToken, depositToken, abortController) {
|
|
22
|
+
const pricePrefetchPromise = this.swapPricing.preFetchPrice(useToken, chainIdentifier).catch(e => {
|
|
23
|
+
this.logger.error("getFromBtcPricePrefetches(): pricePrefetch error: ", e);
|
|
24
|
+
abortController.abort(e);
|
|
25
|
+
return null;
|
|
26
|
+
});
|
|
27
|
+
const { chainInterface } = this.getChain(chainIdentifier);
|
|
28
|
+
const gasTokenPricePrefetchPromise = useToken.toString() === chainInterface.getNativeCurrencyAddress().toString() ?
|
|
29
|
+
pricePrefetchPromise :
|
|
30
|
+
this.swapPricing.preFetchPrice(chainInterface.getNativeCurrencyAddress(), chainIdentifier).catch(e => {
|
|
31
|
+
this.logger.error("getFromBtcPricePrefetches(): gasTokenPricePrefetchPromise error: ", e);
|
|
32
|
+
abortController.abort(e);
|
|
33
|
+
return null;
|
|
34
|
+
});
|
|
35
|
+
const depositTokenPricePrefetchPromise = depositToken === chainInterface.getNativeCurrencyAddress() ?
|
|
36
|
+
gasTokenPricePrefetchPromise :
|
|
37
|
+
this.swapPricing.preFetchPrice(depositToken, chainIdentifier).catch(e => {
|
|
38
|
+
this.logger.error("getFromBtcPricePrefetches(): depositTokenPricePrefetchPromise error: ", e);
|
|
39
|
+
abortController.abort(e);
|
|
40
|
+
return null;
|
|
41
|
+
});
|
|
42
|
+
return { pricePrefetchPromise, gasTokenPricePrefetchPromise, depositTokenPricePrefetchPromise };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Starts a pre-fetch for base security deposit (transaction fee for refunding transaction on our side)
|
|
46
|
+
*
|
|
47
|
+
* @param chainIdentifier
|
|
48
|
+
* @param dummySwapData
|
|
49
|
+
* @param depositToken
|
|
50
|
+
* @param gasTokenPricePrefetchPromise
|
|
51
|
+
* @param depositTokenPricePrefetchPromise
|
|
52
|
+
* @param abortController
|
|
53
|
+
*/
|
|
54
|
+
async getBaseSecurityDepositPrefetch(chainIdentifier, dummySwapData, depositToken, gasTokenPricePrefetchPromise, depositTokenPricePrefetchPromise, abortController) {
|
|
55
|
+
//Solana workaround
|
|
56
|
+
const { swapContract, chainInterface, signer } = this.getChain(chainIdentifier);
|
|
57
|
+
let feeResult;
|
|
58
|
+
const gasToken = chainInterface.getNativeCurrencyAddress();
|
|
59
|
+
if (swapContract.getRawRefundFee != null) {
|
|
60
|
+
try {
|
|
61
|
+
feeResult = await swapContract.getRawRefundFee(signer.getAddress(), dummySwapData);
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
this.logger.error("getBaseSecurityDepositPrefetch(): pre-fetch error: ", e);
|
|
65
|
+
abortController.abort(e);
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
try {
|
|
71
|
+
feeResult = await swapContract.getRefundFee(signer.getAddress(), dummySwapData);
|
|
72
|
+
}
|
|
73
|
+
catch (e1) {
|
|
74
|
+
this.logger.error("getBaseSecurityDepositPrefetch(): pre-fetch error: ", e1);
|
|
75
|
+
abortController.abort(e1);
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
feeResult = feeResult * 2n;
|
|
80
|
+
if (gasToken === depositToken)
|
|
81
|
+
return feeResult;
|
|
82
|
+
const btcValue = await this.swapPricing.getToBtcSwapAmount(feeResult, gasToken, chainIdentifier, true, gasTokenPricePrefetchPromise);
|
|
83
|
+
return await this.swapPricing.getFromBtcSwapAmount(btcValue, depositToken, chainIdentifier, true, depositTokenPricePrefetchPromise);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Starts a pre-fetch for vault balance
|
|
87
|
+
*
|
|
88
|
+
* @param chainIdentifier
|
|
89
|
+
* @param useToken
|
|
90
|
+
* @param abortController
|
|
91
|
+
* @param inContract
|
|
92
|
+
*/
|
|
93
|
+
async getBalancePrefetch(chainIdentifier, useToken, abortController, inContract = true) {
|
|
94
|
+
const { swapContract, signer } = this.getChain(chainIdentifier);
|
|
95
|
+
try {
|
|
96
|
+
return await swapContract.getBalance(signer.getAddress(), useToken, inContract);
|
|
97
|
+
}
|
|
98
|
+
catch (e) {
|
|
99
|
+
this.logger.error("getBalancePrefetch(): balancePrefetch error: ", e);
|
|
100
|
+
abortController.abort(e);
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Checks if we have enough balance of the token in the swap vault
|
|
106
|
+
*
|
|
107
|
+
* @param totalInToken
|
|
108
|
+
* @param balancePrefetch
|
|
109
|
+
* @param signal
|
|
110
|
+
* @throws {DefinedRuntimeError} will throw an error if there are not enough funds in the vault
|
|
111
|
+
*/
|
|
112
|
+
async checkBalance(totalInToken, balancePrefetch, signal) {
|
|
113
|
+
if (totalInToken === 0n)
|
|
114
|
+
return;
|
|
115
|
+
const balance = await balancePrefetch;
|
|
116
|
+
if (signal != null)
|
|
117
|
+
signal.throwIfAborted();
|
|
118
|
+
if (balance == null || balance < totalInToken) {
|
|
119
|
+
throw {
|
|
120
|
+
code: 20002,
|
|
121
|
+
msg: "Not enough liquidity"
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Checks if the specified token is allowed as a deposit token
|
|
127
|
+
*
|
|
128
|
+
* @param chainIdentifier
|
|
129
|
+
* @param depositToken
|
|
130
|
+
* @throws {DefinedRuntimeError} will throw an error if there are not enough funds in the vault
|
|
131
|
+
*/
|
|
132
|
+
checkAllowedDepositToken(chainIdentifier, depositToken) {
|
|
133
|
+
const { chainInterface, allowedDepositTokens } = this.getChain(chainIdentifier);
|
|
134
|
+
if (allowedDepositTokens == null) {
|
|
135
|
+
if (depositToken !== chainInterface.getNativeCurrencyAddress())
|
|
136
|
+
throw {
|
|
137
|
+
code: 20190,
|
|
138
|
+
msg: "Unsupported deposit token"
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
if (!allowedDepositTokens.includes(depositToken))
|
|
143
|
+
throw {
|
|
144
|
+
code: 20190,
|
|
145
|
+
msg: "Unsupported deposit token"
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Signs the created swap
|
|
151
|
+
*
|
|
152
|
+
* @param chainIdentifier
|
|
153
|
+
* @param swapObject
|
|
154
|
+
* @param req
|
|
155
|
+
* @param abortSignal
|
|
156
|
+
* @param signDataPrefetchPromise
|
|
157
|
+
*/
|
|
158
|
+
async getFromBtcSignatureData(chainIdentifier, swapObject, req, abortSignal, signDataPrefetchPromise) {
|
|
159
|
+
const { swapContract, signer } = this.getChain(chainIdentifier);
|
|
160
|
+
const prefetchedSignData = signDataPrefetchPromise != null ? await signDataPrefetchPromise : null;
|
|
161
|
+
if (prefetchedSignData != null)
|
|
162
|
+
this.logger.debug("getFromBtcSignatureData(): pre-fetched signature data: ", prefetchedSignData);
|
|
163
|
+
abortSignal.throwIfAborted();
|
|
164
|
+
const feeRateObj = await req.paramReader.getParams({
|
|
165
|
+
feeRate: SchemaVerifier_1.FieldTypeEnum.String
|
|
166
|
+
}).catch(() => null);
|
|
167
|
+
abortSignal.throwIfAborted();
|
|
168
|
+
const feeRate = feeRateObj?.feeRate != null && typeof (feeRateObj.feeRate) === "string" ? feeRateObj.feeRate : null;
|
|
169
|
+
this.logger.debug("getFromBtcSignatureData(): using fee rate from client: ", feeRate);
|
|
170
|
+
const sigData = await swapContract.getInitSignature(signer, swapObject, this.getInitAuthorizationTimeout(chainIdentifier), prefetchedSignData, feeRate);
|
|
171
|
+
abortSignal.throwIfAborted();
|
|
172
|
+
return {
|
|
173
|
+
...sigData,
|
|
174
|
+
feeRate
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Calculates the required security deposit
|
|
179
|
+
*
|
|
180
|
+
* @param chainIdentifier
|
|
181
|
+
* @param amountBD
|
|
182
|
+
* @param swapFee
|
|
183
|
+
* @param expiryTimeout
|
|
184
|
+
* @param baseSecurityDepositPromise
|
|
185
|
+
* @param depositToken
|
|
186
|
+
* @param depositTokenPricePrefetchPromise
|
|
187
|
+
* @param securityDepositData
|
|
188
|
+
* @param signal
|
|
189
|
+
* @param metadata
|
|
190
|
+
*/
|
|
191
|
+
async getSecurityDeposit(chainIdentifier, amountBD, swapFee, expiryTimeout, baseSecurityDepositPromise, depositToken, depositTokenPricePrefetchPromise, securityDepositData, signal, metadata) {
|
|
192
|
+
let baseSD = await baseSecurityDepositPromise;
|
|
193
|
+
if (securityDepositData.securityDepositBaseMultiplierPPM != null)
|
|
194
|
+
baseSD = baseSD * securityDepositData.securityDepositBaseMultiplierPPM / 1000000n;
|
|
195
|
+
signal.throwIfAborted();
|
|
196
|
+
metadata.times.refundFeeFetched = Date.now();
|
|
197
|
+
const swapValueInDepositToken = await this.swapPricing.getFromBtcSwapAmount(amountBD - swapFee, depositToken, chainIdentifier, true, depositTokenPricePrefetchPromise);
|
|
198
|
+
signal.throwIfAborted();
|
|
199
|
+
const apyPPM = securityDepositData.securityDepositApyPPM ?? BigInt(Math.floor(this.config.securityDepositAPY * 1000000));
|
|
200
|
+
const variableSD = swapValueInDepositToken * apyPPM * expiryTimeout / 1000000n / secondsInYear;
|
|
201
|
+
this.logger.debug("getSecurityDeposit(): base security deposit: " + baseSD.toString(10) +
|
|
202
|
+
" deposit token: " + depositToken +
|
|
203
|
+
" swap output in deposit token: " + swapValueInDepositToken.toString(10) +
|
|
204
|
+
" apy ppm: " + apyPPM.toString(10) +
|
|
205
|
+
" expiry timeout: " + expiryTimeout.toString(10) +
|
|
206
|
+
" variable security deposit: " + variableSD.toString(10));
|
|
207
|
+
return baseSD + variableSD;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
exports.FromBtcBaseSwapHandler = FromBtcBaseSwapHandler;
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import { SwapData } from "@atomiqlabs/base";
|
|
2
|
-
import { EscrowHandlerSwap } from "./EscrowHandlerSwap";
|
|
3
|
-
export declare abstract class ToBtcBaseSwap<T extends SwapData = SwapData, S = any> extends EscrowHandlerSwap<T, S> {
|
|
4
|
-
amount: bigint;
|
|
5
|
-
quotedNetworkFee: bigint;
|
|
6
|
-
readonly quotedNetworkFeeInToken: bigint;
|
|
7
|
-
realNetworkFee: bigint;
|
|
8
|
-
realNetworkFeeInToken: bigint;
|
|
9
|
-
protected constructor(chainIdentifier: string, amount: bigint, swapFee: bigint, swapFeeInToken: bigint, quotedNetworkFee: bigint, quotedNetworkFeeInToken: bigint);
|
|
10
|
-
protected constructor(obj: any);
|
|
11
|
-
serialize(): any;
|
|
12
|
-
setRealNetworkFee(networkFeeInBtc: bigint): void;
|
|
13
|
-
getInputAmount(): bigint;
|
|
14
|
-
getTotalInputAmount(): bigint;
|
|
15
|
-
getSwapFee(): {
|
|
16
|
-
inInputToken: bigint;
|
|
17
|
-
inOutputToken: bigint;
|
|
18
|
-
};
|
|
19
|
-
/**
|
|
20
|
-
* Returns quoted (expected) network fee, denominated in input & output tokens (the fee is paid only once, it is
|
|
21
|
-
* just represented here in both denomination for ease of use)
|
|
22
|
-
*/
|
|
23
|
-
getQuotedNetworkFee(): {
|
|
24
|
-
inInputToken: bigint;
|
|
25
|
-
inOutputToken: bigint;
|
|
26
|
-
};
|
|
27
|
-
/**
|
|
28
|
-
* Returns real network fee paid for the swap, denominated in input & output tokens (the fee is paid only once, it is
|
|
29
|
-
* just represented here in both denomination for ease of use)
|
|
30
|
-
*/
|
|
31
|
-
getRealNetworkFee(): {
|
|
32
|
-
inInputToken: bigint;
|
|
33
|
-
inOutputToken: bigint;
|
|
34
|
-
};
|
|
35
|
-
getOutputAmount(): bigint;
|
|
36
|
-
}
|
|
1
|
+
import { SwapData } from "@atomiqlabs/base";
|
|
2
|
+
import { EscrowHandlerSwap } from "./EscrowHandlerSwap";
|
|
3
|
+
export declare abstract class ToBtcBaseSwap<T extends SwapData = SwapData, S = any> extends EscrowHandlerSwap<T, S> {
|
|
4
|
+
amount: bigint;
|
|
5
|
+
quotedNetworkFee: bigint;
|
|
6
|
+
readonly quotedNetworkFeeInToken: bigint;
|
|
7
|
+
realNetworkFee: bigint;
|
|
8
|
+
realNetworkFeeInToken: bigint;
|
|
9
|
+
protected constructor(chainIdentifier: string, amount: bigint, swapFee: bigint, swapFeeInToken: bigint, quotedNetworkFee: bigint, quotedNetworkFeeInToken: bigint);
|
|
10
|
+
protected constructor(obj: any);
|
|
11
|
+
serialize(): any;
|
|
12
|
+
setRealNetworkFee(networkFeeInBtc: bigint): void;
|
|
13
|
+
getInputAmount(): bigint;
|
|
14
|
+
getTotalInputAmount(): bigint;
|
|
15
|
+
getSwapFee(): {
|
|
16
|
+
inInputToken: bigint;
|
|
17
|
+
inOutputToken: bigint;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Returns quoted (expected) network fee, denominated in input & output tokens (the fee is paid only once, it is
|
|
21
|
+
* just represented here in both denomination for ease of use)
|
|
22
|
+
*/
|
|
23
|
+
getQuotedNetworkFee(): {
|
|
24
|
+
inInputToken: bigint;
|
|
25
|
+
inOutputToken: bigint;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Returns real network fee paid for the swap, denominated in input & output tokens (the fee is paid only once, it is
|
|
29
|
+
* just represented here in both denomination for ease of use)
|
|
30
|
+
*/
|
|
31
|
+
getRealNetworkFee(): {
|
|
32
|
+
inInputToken: bigint;
|
|
33
|
+
inOutputToken: bigint;
|
|
34
|
+
};
|
|
35
|
+
getOutputAmount(): bigint;
|
|
36
|
+
}
|
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ToBtcBaseSwap = void 0;
|
|
4
|
-
const Utils_1 = require("../../utils/Utils");
|
|
5
|
-
const EscrowHandlerSwap_1 = require("./EscrowHandlerSwap");
|
|
6
|
-
class ToBtcBaseSwap extends EscrowHandlerSwap_1.EscrowHandlerSwap {
|
|
7
|
-
constructor(obj, amount, swapFee, swapFeeInToken, quotedNetworkFee, quotedNetworkFeeInToken) {
|
|
8
|
-
if (typeof (obj) === "string" && typeof (amount) === "bigint" && typeof (swapFee) === "bigint" && typeof (swapFeeInToken) === "bigint" &&
|
|
9
|
-
typeof (quotedNetworkFee) === "bigint" && typeof (quotedNetworkFeeInToken) === "bigint") {
|
|
10
|
-
super(obj, swapFee, swapFeeInToken);
|
|
11
|
-
this.amount = amount;
|
|
12
|
-
this.quotedNetworkFee = quotedNetworkFee;
|
|
13
|
-
this.quotedNetworkFeeInToken = quotedNetworkFeeInToken;
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
super(obj);
|
|
18
|
-
this.amount = (0, Utils_1.deserializeBN)(obj.amount);
|
|
19
|
-
this.quotedNetworkFee = (0, Utils_1.deserializeBN)(obj.quotedNetworkFee);
|
|
20
|
-
this.quotedNetworkFeeInToken = (0, Utils_1.deserializeBN)(obj.quotedNetworkFeeInToken);
|
|
21
|
-
this.realNetworkFee = (0, Utils_1.deserializeBN)(obj.realNetworkFee);
|
|
22
|
-
this.realNetworkFeeInToken = (0, Utils_1.deserializeBN)(obj.realNetworkFeeInToken);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
serialize() {
|
|
26
|
-
const obj = super.serialize();
|
|
27
|
-
obj.amount = (0, Utils_1.serializeBN)(this.amount);
|
|
28
|
-
obj.quotedNetworkFee = (0, Utils_1.serializeBN)(this.quotedNetworkFee);
|
|
29
|
-
obj.quotedNetworkFeeInToken = (0, Utils_1.serializeBN)(this.quotedNetworkFeeInToken);
|
|
30
|
-
obj.realNetworkFee = (0, Utils_1.serializeBN)(this.realNetworkFee);
|
|
31
|
-
obj.realNetworkFeeInToken = (0, Utils_1.serializeBN)(this.realNetworkFeeInToken);
|
|
32
|
-
return obj;
|
|
33
|
-
}
|
|
34
|
-
setRealNetworkFee(networkFeeInBtc) {
|
|
35
|
-
this.realNetworkFee = networkFeeInBtc;
|
|
36
|
-
if (this.quotedNetworkFee != null && this.quotedNetworkFeeInToken != null) {
|
|
37
|
-
this.realNetworkFeeInToken = this.realNetworkFee * this.quotedNetworkFeeInToken / this.quotedNetworkFee;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
getInputAmount() {
|
|
41
|
-
return this.getTotalInputAmount() - this.getSwapFee().inInputToken - this.getQuotedNetworkFee().inInputToken;
|
|
42
|
-
}
|
|
43
|
-
getTotalInputAmount() {
|
|
44
|
-
return this.data.getAmount();
|
|
45
|
-
}
|
|
46
|
-
getSwapFee() {
|
|
47
|
-
return { inInputToken: this.swapFeeInToken, inOutputToken: this.swapFee };
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Returns quoted (expected) network fee, denominated in input & output tokens (the fee is paid only once, it is
|
|
51
|
-
* just represented here in both denomination for ease of use)
|
|
52
|
-
*/
|
|
53
|
-
getQuotedNetworkFee() {
|
|
54
|
-
return { inInputToken: this.quotedNetworkFeeInToken, inOutputToken: this.quotedNetworkFee };
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Returns real network fee paid for the swap, denominated in input & output tokens (the fee is paid only once, it is
|
|
58
|
-
* just represented here in both denomination for ease of use)
|
|
59
|
-
*/
|
|
60
|
-
getRealNetworkFee() {
|
|
61
|
-
return { inInputToken: this.realNetworkFeeInToken, inOutputToken: this.realNetworkFee };
|
|
62
|
-
}
|
|
63
|
-
getOutputAmount() {
|
|
64
|
-
return this.amount;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
exports.ToBtcBaseSwap = ToBtcBaseSwap;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ToBtcBaseSwap = void 0;
|
|
4
|
+
const Utils_1 = require("../../utils/Utils");
|
|
5
|
+
const EscrowHandlerSwap_1 = require("./EscrowHandlerSwap");
|
|
6
|
+
class ToBtcBaseSwap extends EscrowHandlerSwap_1.EscrowHandlerSwap {
|
|
7
|
+
constructor(obj, amount, swapFee, swapFeeInToken, quotedNetworkFee, quotedNetworkFeeInToken) {
|
|
8
|
+
if (typeof (obj) === "string" && typeof (amount) === "bigint" && typeof (swapFee) === "bigint" && typeof (swapFeeInToken) === "bigint" &&
|
|
9
|
+
typeof (quotedNetworkFee) === "bigint" && typeof (quotedNetworkFeeInToken) === "bigint") {
|
|
10
|
+
super(obj, swapFee, swapFeeInToken);
|
|
11
|
+
this.amount = amount;
|
|
12
|
+
this.quotedNetworkFee = quotedNetworkFee;
|
|
13
|
+
this.quotedNetworkFeeInToken = quotedNetworkFeeInToken;
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
super(obj);
|
|
18
|
+
this.amount = (0, Utils_1.deserializeBN)(obj.amount);
|
|
19
|
+
this.quotedNetworkFee = (0, Utils_1.deserializeBN)(obj.quotedNetworkFee);
|
|
20
|
+
this.quotedNetworkFeeInToken = (0, Utils_1.deserializeBN)(obj.quotedNetworkFeeInToken);
|
|
21
|
+
this.realNetworkFee = (0, Utils_1.deserializeBN)(obj.realNetworkFee);
|
|
22
|
+
this.realNetworkFeeInToken = (0, Utils_1.deserializeBN)(obj.realNetworkFeeInToken);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
serialize() {
|
|
26
|
+
const obj = super.serialize();
|
|
27
|
+
obj.amount = (0, Utils_1.serializeBN)(this.amount);
|
|
28
|
+
obj.quotedNetworkFee = (0, Utils_1.serializeBN)(this.quotedNetworkFee);
|
|
29
|
+
obj.quotedNetworkFeeInToken = (0, Utils_1.serializeBN)(this.quotedNetworkFeeInToken);
|
|
30
|
+
obj.realNetworkFee = (0, Utils_1.serializeBN)(this.realNetworkFee);
|
|
31
|
+
obj.realNetworkFeeInToken = (0, Utils_1.serializeBN)(this.realNetworkFeeInToken);
|
|
32
|
+
return obj;
|
|
33
|
+
}
|
|
34
|
+
setRealNetworkFee(networkFeeInBtc) {
|
|
35
|
+
this.realNetworkFee = networkFeeInBtc;
|
|
36
|
+
if (this.quotedNetworkFee != null && this.quotedNetworkFeeInToken != null) {
|
|
37
|
+
this.realNetworkFeeInToken = this.realNetworkFee * this.quotedNetworkFeeInToken / this.quotedNetworkFee;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
getInputAmount() {
|
|
41
|
+
return this.getTotalInputAmount() - this.getSwapFee().inInputToken - this.getQuotedNetworkFee().inInputToken;
|
|
42
|
+
}
|
|
43
|
+
getTotalInputAmount() {
|
|
44
|
+
return this.data.getAmount();
|
|
45
|
+
}
|
|
46
|
+
getSwapFee() {
|
|
47
|
+
return { inInputToken: this.swapFeeInToken, inOutputToken: this.swapFee };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Returns quoted (expected) network fee, denominated in input & output tokens (the fee is paid only once, it is
|
|
51
|
+
* just represented here in both denomination for ease of use)
|
|
52
|
+
*/
|
|
53
|
+
getQuotedNetworkFee() {
|
|
54
|
+
return { inInputToken: this.quotedNetworkFeeInToken, inOutputToken: this.quotedNetworkFee };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Returns real network fee paid for the swap, denominated in input & output tokens (the fee is paid only once, it is
|
|
58
|
+
* just represented here in both denomination for ease of use)
|
|
59
|
+
*/
|
|
60
|
+
getRealNetworkFee() {
|
|
61
|
+
return { inInputToken: this.realNetworkFeeInToken, inOutputToken: this.realNetworkFee };
|
|
62
|
+
}
|
|
63
|
+
getOutputAmount() {
|
|
64
|
+
return this.amount;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.ToBtcBaseSwap = ToBtcBaseSwap;
|