@atomiqlabs/lp-lib 16.2.0 → 16.2.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/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 +60 -60
- package/dist/plugins/IPlugin.d.ts +144 -144
- package/dist/plugins/IPlugin.js +34 -34
- package/dist/plugins/PluginManager.d.ts +113 -113
- package/dist/plugins/PluginManager.js +274 -274
- package/dist/prices/BinanceSwapPrice.d.ts +29 -29
- package/dist/prices/BinanceSwapPrice.js +79 -79
- package/dist/prices/CoinGeckoSwapPrice.d.ts +33 -33
- package/dist/prices/CoinGeckoSwapPrice.js +51 -51
- package/dist/prices/ISwapPrice.d.ts +43 -43
- package/dist/prices/ISwapPrice.js +55 -55
- package/dist/prices/OKXSwapPrice.d.ts +29 -29
- package/dist/prices/OKXSwapPrice.js +79 -79
- 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 +171 -171
- package/dist/swaps/SwapHandler.js +217 -217
- 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 +74 -74
- package/dist/swaps/assertions/FromBtcAmountAssertions.d.ts +76 -76
- package/dist/swaps/assertions/FromBtcAmountAssertions.js +185 -185
- 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 +50 -50
- package/dist/swaps/escrow/EscrowHandler.js +151 -151
- 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 +84 -84
- package/dist/swaps/escrow/frombtc_abstract/FromBtcAbs.js +322 -322
- 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 +108 -108
- package/dist/swaps/escrow/frombtcln_abstract/FromBtcLnAbs.js +695 -695
- 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 +112 -112
- package/dist/swaps/escrow/frombtcln_autoinit/FromBtcLnAuto.js +708 -708
- 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 +170 -170
- package/dist/swaps/escrow/tobtc_abstract/ToBtcAbs.js +745 -745
- package/dist/swaps/escrow/tobtc_abstract/ToBtcSwapAbs.d.ts +28 -28
- package/dist/swaps/escrow/tobtc_abstract/ToBtcSwapAbs.js +64 -64
- package/dist/swaps/escrow/tobtcln_abstract/ToBtcLnAbs.d.ts +178 -178
- package/dist/swaps/escrow/tobtcln_abstract/ToBtcLnAbs.js +900 -899
- 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 +44 -44
- package/dist/swaps/spv_vault_swap/SpvVault.js +145 -145
- package/dist/swaps/spv_vault_swap/SpvVaultSwap.d.ts +68 -68
- 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 +561 -561
- package/dist/swaps/spv_vault_swap/SpvVaults.d.ts +63 -63
- package/dist/swaps/spv_vault_swap/SpvVaults.js +491 -491
- package/dist/swaps/trusted/frombtc_trusted/FromBtcTrusted.d.ts +52 -52
- package/dist/swaps/trusted/frombtc_trusted/FromBtcTrusted.js +662 -662
- 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 +77 -77
- package/dist/swaps/trusted/frombtcln_trusted/FromBtcLnTrusted.js +504 -504
- 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 +4 -4
- package/dist/utils/BitcoinUtils.js +61 -61
- package/dist/utils/Utils.d.ts +32 -32
- package/dist/utils/Utils.js +129 -129
- 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 +149 -149
- package/dist/wallets/IBitcoinWallet.js +97 -97
- package/dist/wallets/ILightningWallet.d.ts +136 -136
- 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 +103 -103
- package/src/plugins/IPlugin.ts +174 -174
- package/src/plugins/PluginManager.ts +354 -354
- package/src/prices/BinanceSwapPrice.ts +101 -101
- package/src/prices/CoinGeckoSwapPrice.ts +75 -75
- package/src/prices/ISwapPrice.ts +88 -88
- package/src/prices/OKXSwapPrice.ts +101 -101
- 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 +323 -323
- package/src/swaps/SwapHandlerSwap.ts +141 -141
- package/src/swaps/assertions/AmountAssertions.ts +77 -77
- package/src/swaps/assertions/FromBtcAmountAssertions.ts +251 -251
- package/src/swaps/assertions/LightningAssertions.ts +103 -103
- package/src/swaps/assertions/ToBtcAmountAssertions.ts +203 -203
- package/src/swaps/escrow/EscrowHandler.ts +172 -172
- 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 +457 -457
- package/src/swaps/escrow/frombtc_abstract/FromBtcSwapAbs.ts +61 -61
- package/src/swaps/escrow/frombtcln_abstract/FromBtcLnAbs.ts +873 -873
- package/src/swaps/escrow/frombtcln_abstract/FromBtcLnSwapAbs.ts +141 -141
- package/src/swaps/escrow/frombtcln_autoinit/FromBtcLnAuto.ts +866 -866
- package/src/swaps/escrow/frombtcln_autoinit/FromBtcLnAutoSwap.ts +196 -196
- package/src/swaps/escrow/tobtc_abstract/ToBtcAbs.ts +920 -920
- package/src/swaps/escrow/tobtc_abstract/ToBtcSwapAbs.ts +108 -108
- package/src/swaps/escrow/tobtcln_abstract/ToBtcLnAbs.ts +1150 -1149
- package/src/swaps/escrow/tobtcln_abstract/ToBtcLnSwapAbs.ts +80 -80
- package/src/swaps/spv_vault_swap/SpvVault.ts +178 -178
- package/src/swaps/spv_vault_swap/SpvVaultSwap.ts +228 -228
- package/src/swaps/spv_vault_swap/SpvVaultSwapHandler.ts +718 -718
- package/src/swaps/spv_vault_swap/SpvVaults.ts +567 -567
- package/src/swaps/trusted/frombtc_trusted/FromBtcTrusted.ts +762 -762
- package/src/swaps/trusted/frombtc_trusted/FromBtcTrustedSwap.ts +185 -185
- package/src/swaps/trusted/frombtcln_trusted/FromBtcLnTrusted.ts +603 -603
- package/src/swaps/trusted/frombtcln_trusted/FromBtcLnTrustedSwap.ts +121 -121
- package/src/utils/BitcoinUtils.ts +59 -59
- package/src/utils/Utils.ts +150 -150
- 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 +237 -237
- package/src/wallets/ILightningWallet.ts +200 -200
- package/src/wallets/ISpvVaultSigner.ts +10 -10
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
import { SwapData } from "@atomiqlabs/base";
|
|
2
|
-
import { MultichainData, SwapBaseConfig } from "../SwapHandler";
|
|
3
|
-
import { IParamReader } from "../../utils/paramcoders/IParamReader";
|
|
4
|
-
import { Request } from "express";
|
|
5
|
-
import { EscrowHandler } from "./EscrowHandler";
|
|
6
|
-
import { FromBtcBaseSwap } from "./FromBtcBaseSwap";
|
|
7
|
-
import { FromBtcAmountAssertions } from "../assertions/FromBtcAmountAssertions";
|
|
8
|
-
import { IIntermediaryStorage } from "../../storage/IIntermediaryStorage";
|
|
9
|
-
import { ISwapPrice } from "../../prices/ISwapPrice";
|
|
10
|
-
export type FromBtcBaseConfig = SwapBaseConfig & {
|
|
11
|
-
securityDepositAPY: number;
|
|
12
|
-
};
|
|
13
|
-
export declare abstract class FromBtcBaseSwapHandler<V extends FromBtcBaseSwap<SwapData, S>, S> extends EscrowHandler<V, S> {
|
|
14
|
-
abstract config: FromBtcBaseConfig;
|
|
15
|
-
readonly AmountAssertions: FromBtcAmountAssertions;
|
|
16
|
-
constructor(storageDirectory: IIntermediaryStorage<V>, path: string, chainsData: MultichainData, swapPricing: ISwapPrice, config: FromBtcBaseConfig);
|
|
17
|
-
/**
|
|
18
|
-
* Starts a pre-fetch for swap price & security deposit price
|
|
19
|
-
*
|
|
20
|
-
* @param chainIdentifier
|
|
21
|
-
* @param useToken
|
|
22
|
-
* @param depositToken
|
|
23
|
-
* @param abortController
|
|
24
|
-
*/
|
|
25
|
-
protected getFromBtcPricePrefetches(chainIdentifier: string, useToken: string, depositToken: string, abortController: AbortController): {
|
|
26
|
-
pricePrefetchPromise: Promise<bigint>;
|
|
27
|
-
gasTokenPricePrefetchPromise: Promise<bigint>;
|
|
28
|
-
depositTokenPricePrefetchPromise: Promise<bigint>;
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* Starts a pre-fetch for base security deposit (transaction fee for refunding transaction on our side)
|
|
32
|
-
*
|
|
33
|
-
* @param chainIdentifier
|
|
34
|
-
* @param dummySwapData
|
|
35
|
-
* @param depositToken
|
|
36
|
-
* @param gasTokenPricePrefetchPromise
|
|
37
|
-
* @param depositTokenPricePrefetchPromise
|
|
38
|
-
* @param abortController
|
|
39
|
-
*/
|
|
40
|
-
protected getBaseSecurityDepositPrefetch(chainIdentifier: string, dummySwapData: SwapData, depositToken: string, gasTokenPricePrefetchPromise: Promise<bigint>, depositTokenPricePrefetchPromise: Promise<bigint>, abortController: AbortController): Promise<bigint>;
|
|
41
|
-
/**
|
|
42
|
-
* Starts a pre-fetch for vault balance
|
|
43
|
-
*
|
|
44
|
-
* @param chainIdentifier
|
|
45
|
-
* @param useToken
|
|
46
|
-
* @param abortController
|
|
47
|
-
* @param inContract
|
|
48
|
-
*/
|
|
49
|
-
protected getBalancePrefetch(chainIdentifier: string, useToken: string, abortController: AbortController, inContract?: boolean): Promise<bigint>;
|
|
50
|
-
/**
|
|
51
|
-
* Checks if we have enough balance of the token in the swap vault
|
|
52
|
-
*
|
|
53
|
-
* @param totalInToken
|
|
54
|
-
* @param balancePrefetch
|
|
55
|
-
* @param signal
|
|
56
|
-
* @throws {DefinedRuntimeError} will throw an error if there are not enough funds in the vault
|
|
57
|
-
*/
|
|
58
|
-
protected checkBalance(totalInToken: bigint, balancePrefetch: Promise<bigint>, signal: AbortSignal | null): Promise<void>;
|
|
59
|
-
/**
|
|
60
|
-
* Checks if the specified token is allowed as a deposit token
|
|
61
|
-
*
|
|
62
|
-
* @param chainIdentifier
|
|
63
|
-
* @param depositToken
|
|
64
|
-
* @throws {DefinedRuntimeError} will throw an error if there are not enough funds in the vault
|
|
65
|
-
*/
|
|
66
|
-
protected checkAllowedDepositToken(chainIdentifier: string, depositToken: string): void;
|
|
67
|
-
/**
|
|
68
|
-
* Signs the created swap
|
|
69
|
-
*
|
|
70
|
-
* @param chainIdentifier
|
|
71
|
-
* @param swapObject
|
|
72
|
-
* @param req
|
|
73
|
-
* @param abortSignal
|
|
74
|
-
* @param signDataPrefetchPromise
|
|
75
|
-
*/
|
|
76
|
-
protected getFromBtcSignatureData(chainIdentifier: string, swapObject: SwapData, req: Request & {
|
|
77
|
-
paramReader: IParamReader;
|
|
78
|
-
}, abortSignal: AbortSignal, signDataPrefetchPromise?: Promise<any>): Promise<{
|
|
79
|
-
prefix: string;
|
|
80
|
-
timeout: string;
|
|
81
|
-
signature: string;
|
|
82
|
-
feeRate: string;
|
|
83
|
-
}>;
|
|
84
|
-
/**
|
|
85
|
-
* Calculates the required security deposit
|
|
86
|
-
*
|
|
87
|
-
* @param chainIdentifier
|
|
88
|
-
* @param amountBD
|
|
89
|
-
* @param swapFee
|
|
90
|
-
* @param expiryTimeout
|
|
91
|
-
* @param baseSecurityDepositPromise
|
|
92
|
-
* @param depositToken
|
|
93
|
-
* @param depositTokenPricePrefetchPromise
|
|
94
|
-
* @param securityDepositData
|
|
95
|
-
* @param signal
|
|
96
|
-
* @param metadata
|
|
97
|
-
*/
|
|
98
|
-
protected getSecurityDeposit(chainIdentifier: string, amountBD: bigint, swapFee: bigint, expiryTimeout: bigint, baseSecurityDepositPromise: Promise<bigint>, depositToken: string, depositTokenPricePrefetchPromise: Promise<bigint>, securityDepositData: {
|
|
99
|
-
securityDepositApyPPM?: bigint;
|
|
100
|
-
securityDepositBaseMultiplierPPM?: bigint;
|
|
101
|
-
}, signal: AbortSignal, metadata: any): Promise<bigint>;
|
|
102
|
-
}
|
|
1
|
+
import { SwapData } from "@atomiqlabs/base";
|
|
2
|
+
import { MultichainData, SwapBaseConfig } from "../SwapHandler";
|
|
3
|
+
import { IParamReader } from "../../utils/paramcoders/IParamReader";
|
|
4
|
+
import { Request } from "express";
|
|
5
|
+
import { EscrowHandler } from "./EscrowHandler";
|
|
6
|
+
import { FromBtcBaseSwap } from "./FromBtcBaseSwap";
|
|
7
|
+
import { FromBtcAmountAssertions } from "../assertions/FromBtcAmountAssertions";
|
|
8
|
+
import { IIntermediaryStorage } from "../../storage/IIntermediaryStorage";
|
|
9
|
+
import { ISwapPrice } from "../../prices/ISwapPrice";
|
|
10
|
+
export type FromBtcBaseConfig = SwapBaseConfig & {
|
|
11
|
+
securityDepositAPY: number;
|
|
12
|
+
};
|
|
13
|
+
export declare abstract class FromBtcBaseSwapHandler<V extends FromBtcBaseSwap<SwapData, S>, S> extends EscrowHandler<V, S> {
|
|
14
|
+
abstract config: FromBtcBaseConfig;
|
|
15
|
+
readonly AmountAssertions: FromBtcAmountAssertions;
|
|
16
|
+
constructor(storageDirectory: IIntermediaryStorage<V>, path: string, chainsData: MultichainData, swapPricing: ISwapPrice, config: FromBtcBaseConfig);
|
|
17
|
+
/**
|
|
18
|
+
* Starts a pre-fetch for swap price & security deposit price
|
|
19
|
+
*
|
|
20
|
+
* @param chainIdentifier
|
|
21
|
+
* @param useToken
|
|
22
|
+
* @param depositToken
|
|
23
|
+
* @param abortController
|
|
24
|
+
*/
|
|
25
|
+
protected getFromBtcPricePrefetches(chainIdentifier: string, useToken: string, depositToken: string, abortController: AbortController): {
|
|
26
|
+
pricePrefetchPromise: Promise<bigint>;
|
|
27
|
+
gasTokenPricePrefetchPromise: Promise<bigint>;
|
|
28
|
+
depositTokenPricePrefetchPromise: Promise<bigint>;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Starts a pre-fetch for base security deposit (transaction fee for refunding transaction on our side)
|
|
32
|
+
*
|
|
33
|
+
* @param chainIdentifier
|
|
34
|
+
* @param dummySwapData
|
|
35
|
+
* @param depositToken
|
|
36
|
+
* @param gasTokenPricePrefetchPromise
|
|
37
|
+
* @param depositTokenPricePrefetchPromise
|
|
38
|
+
* @param abortController
|
|
39
|
+
*/
|
|
40
|
+
protected getBaseSecurityDepositPrefetch(chainIdentifier: string, dummySwapData: SwapData, depositToken: string, gasTokenPricePrefetchPromise: Promise<bigint>, depositTokenPricePrefetchPromise: Promise<bigint>, abortController: AbortController): Promise<bigint>;
|
|
41
|
+
/**
|
|
42
|
+
* Starts a pre-fetch for vault balance
|
|
43
|
+
*
|
|
44
|
+
* @param chainIdentifier
|
|
45
|
+
* @param useToken
|
|
46
|
+
* @param abortController
|
|
47
|
+
* @param inContract
|
|
48
|
+
*/
|
|
49
|
+
protected getBalancePrefetch(chainIdentifier: string, useToken: string, abortController: AbortController, inContract?: boolean): Promise<bigint>;
|
|
50
|
+
/**
|
|
51
|
+
* Checks if we have enough balance of the token in the swap vault
|
|
52
|
+
*
|
|
53
|
+
* @param totalInToken
|
|
54
|
+
* @param balancePrefetch
|
|
55
|
+
* @param signal
|
|
56
|
+
* @throws {DefinedRuntimeError} will throw an error if there are not enough funds in the vault
|
|
57
|
+
*/
|
|
58
|
+
protected checkBalance(totalInToken: bigint, balancePrefetch: Promise<bigint>, signal: AbortSignal | null): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Checks if the specified token is allowed as a deposit token
|
|
61
|
+
*
|
|
62
|
+
* @param chainIdentifier
|
|
63
|
+
* @param depositToken
|
|
64
|
+
* @throws {DefinedRuntimeError} will throw an error if there are not enough funds in the vault
|
|
65
|
+
*/
|
|
66
|
+
protected checkAllowedDepositToken(chainIdentifier: string, depositToken: string): void;
|
|
67
|
+
/**
|
|
68
|
+
* Signs the created swap
|
|
69
|
+
*
|
|
70
|
+
* @param chainIdentifier
|
|
71
|
+
* @param swapObject
|
|
72
|
+
* @param req
|
|
73
|
+
* @param abortSignal
|
|
74
|
+
* @param signDataPrefetchPromise
|
|
75
|
+
*/
|
|
76
|
+
protected getFromBtcSignatureData(chainIdentifier: string, swapObject: SwapData, req: Request & {
|
|
77
|
+
paramReader: IParamReader;
|
|
78
|
+
}, abortSignal: AbortSignal, signDataPrefetchPromise?: Promise<any>): Promise<{
|
|
79
|
+
prefix: string;
|
|
80
|
+
timeout: string;
|
|
81
|
+
signature: string;
|
|
82
|
+
feeRate: string;
|
|
83
|
+
}>;
|
|
84
|
+
/**
|
|
85
|
+
* Calculates the required security deposit
|
|
86
|
+
*
|
|
87
|
+
* @param chainIdentifier
|
|
88
|
+
* @param amountBD
|
|
89
|
+
* @param swapFee
|
|
90
|
+
* @param expiryTimeout
|
|
91
|
+
* @param baseSecurityDepositPromise
|
|
92
|
+
* @param depositToken
|
|
93
|
+
* @param depositTokenPricePrefetchPromise
|
|
94
|
+
* @param securityDepositData
|
|
95
|
+
* @param signal
|
|
96
|
+
* @param metadata
|
|
97
|
+
*/
|
|
98
|
+
protected getSecurityDeposit(chainIdentifier: string, amountBD: bigint, swapFee: bigint, expiryTimeout: bigint, baseSecurityDepositPromise: Promise<bigint>, depositToken: string, depositTokenPricePrefetchPromise: Promise<bigint>, securityDepositData: {
|
|
99
|
+
securityDepositApyPPM?: bigint;
|
|
100
|
+
securityDepositBaseMultiplierPPM?: bigint;
|
|
101
|
+
}, signal: AbortSignal, metadata: any): Promise<bigint>;
|
|
102
|
+
}
|
|
@@ -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;
|