@atomiqlabs/sdk 8.1.8 → 8.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bitcoin/coinselect2/utils.d.ts +6 -0
- package/dist/bitcoin/wallet/BitcoinWallet.d.ts +41 -5
- package/dist/bitcoin/wallet/BitcoinWallet.js +36 -1
- package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +52 -2
- package/dist/bitcoin/wallet/IBitcoinWallet.js +2 -1
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +42 -7
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +36 -1
- package/dist/enums/FeeType.d.ts +8 -1
- package/dist/enums/FeeType.js +8 -1
- package/dist/enums/SwapAmountType.d.ts +7 -0
- package/dist/enums/SwapAmountType.js +7 -0
- package/dist/enums/SwapDirection.d.ts +7 -0
- package/dist/enums/SwapDirection.js +7 -0
- package/dist/enums/SwapType.d.ts +62 -1
- package/dist/enums/SwapType.js +62 -1
- package/dist/errors/IntermediaryError.d.ts +4 -0
- package/dist/errors/IntermediaryError.js +1 -0
- package/dist/errors/RequestError.d.ts +15 -1
- package/dist/errors/RequestError.js +8 -0
- package/dist/errors/UserError.d.ts +1 -0
- package/dist/errors/UserError.js +1 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.js +7 -6
- package/dist/intermediaries/Intermediary.d.ts +61 -14
- package/dist/intermediaries/Intermediary.js +38 -11
- package/dist/intermediaries/IntermediaryDiscovery.d.ts +62 -29
- package/dist/intermediaries/IntermediaryDiscovery.js +39 -24
- package/dist/prices/RedundantSwapPrice.d.ts +26 -5
- package/dist/prices/RedundantSwapPrice.js +22 -2
- package/dist/prices/SingleSwapPrice.d.ts +10 -7
- package/dist/prices/SingleSwapPrice.js +11 -8
- package/dist/prices/SwapPriceWithChain.d.ts +56 -19
- package/dist/prices/SwapPriceWithChain.js +62 -25
- package/dist/prices/abstract/IPriceProvider.d.ts +4 -4
- package/dist/prices/abstract/IPriceProvider.js +1 -1
- package/dist/prices/abstract/ISwapPrice.d.ts +95 -46
- package/dist/prices/abstract/ISwapPrice.js +104 -56
- package/dist/prices/providers/BinancePriceProvider.d.ts +8 -1
- package/dist/prices/providers/BinancePriceProvider.js +8 -1
- package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +7 -1
- package/dist/prices/providers/CoinGeckoPriceProvider.js +7 -1
- package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +7 -1
- package/dist/prices/providers/CoinPaprikaPriceProvider.js +7 -1
- package/dist/prices/providers/CustomPriceProvider.d.ts +12 -1
- package/dist/prices/providers/CustomPriceProvider.js +12 -1
- package/dist/prices/providers/KrakenPriceProvider.d.ts +10 -1
- package/dist/prices/providers/KrakenPriceProvider.js +10 -1
- package/dist/prices/providers/OKXPriceProvider.d.ts +7 -1
- package/dist/prices/providers/OKXPriceProvider.js +7 -1
- package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +3 -0
- package/dist/prices/providers/abstract/ExchangePriceProvider.js +3 -0
- package/dist/storage/IUnifiedStorage.d.ts +19 -7
- package/dist/storage/UnifiedSwapStorage.d.ts +33 -3
- package/dist/storage/UnifiedSwapStorage.js +29 -1
- package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +31 -7
- package/dist/storage-browser/IndexedDBUnifiedStorage.js +29 -6
- package/dist/storage-browser/LocalStorageManager.d.ts +25 -1
- package/dist/storage-browser/LocalStorageManager.js +25 -1
- package/dist/swapper/Swapper.d.ts +380 -226
- package/dist/swapper/Swapper.js +383 -349
- package/dist/swapper/SwapperFactory.d.ts +66 -18
- package/dist/swapper/SwapperFactory.js +24 -3
- package/dist/swapper/SwapperUtils.d.ts +75 -28
- package/dist/swapper/SwapperUtils.js +107 -60
- package/dist/swapper/SwapperWithChain.d.ts +286 -91
- package/dist/swapper/SwapperWithChain.js +218 -64
- package/dist/swapper/SwapperWithSigner.d.ts +229 -80
- package/dist/swapper/SwapperWithSigner.js +190 -44
- package/dist/swaps/IAddressSwap.d.ts +12 -3
- package/dist/swaps/IAddressSwap.js +3 -2
- package/dist/swaps/IBTCWalletSwap.d.ts +26 -8
- package/dist/swaps/IBTCWalletSwap.js +3 -2
- package/dist/swaps/IClaimableSwap.d.ts +38 -6
- package/dist/swaps/IClaimableSwap.js +3 -2
- package/dist/swaps/IClaimableSwapWrapper.d.ts +11 -1
- package/dist/swaps/IRefundableSwap.d.ts +31 -5
- package/dist/swaps/IRefundableSwap.js +3 -2
- package/dist/swaps/ISwap.d.ts +162 -24
- package/dist/swaps/ISwap.js +92 -35
- package/dist/swaps/ISwapWithGasDrop.d.ts +8 -2
- package/dist/swaps/ISwapWithGasDrop.js +2 -1
- package/dist/swaps/ISwapWrapper.d.ts +161 -52
- package/dist/swaps/ISwapWrapper.js +131 -73
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +51 -6
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +22 -12
- package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +65 -12
- package/dist/swaps/escrow_swaps/IEscrowSwap.js +38 -19
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +39 -9
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +30 -21
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +31 -15
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +33 -18
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +97 -28
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +91 -27
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +22 -9
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +24 -11
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +278 -60
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +519 -241
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +77 -26
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +132 -50
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +313 -52
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +544 -194
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +87 -26
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +147 -58
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +222 -55
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +462 -244
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +77 -23
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +116 -46
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +195 -58
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +324 -191
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +30 -5
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +44 -19
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +61 -20
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +75 -32
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +76 -50
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +106 -101
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +37 -14
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +66 -20
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +46 -17
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +82 -27
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +350 -88
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +482 -215
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +76 -24
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +247 -124
- package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +148 -20
- package/dist/swaps/trusted/ln/LnForGasSwap.js +175 -45
- package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +29 -10
- package/dist/swaps/trusted/ln/LnForGasWrapper.js +30 -11
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +202 -49
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +232 -80
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +34 -12
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +33 -14
- package/dist/types/AmountData.d.ts +2 -1
- package/dist/types/CustomPriceFunction.d.ts +8 -2
- package/dist/types/PriceInfoType.d.ts +4 -4
- package/dist/types/PriceInfoType.js +3 -3
- package/dist/types/SwapExecutionAction.d.ts +85 -4
- package/dist/types/SwapWithSigner.d.ts +5 -2
- package/dist/types/SwapWithSigner.js +5 -2
- package/dist/types/Token.d.ts +11 -5
- package/dist/types/Token.js +6 -3
- package/dist/types/TokenAmount.d.ts +3 -0
- package/dist/types/TokenAmount.js +2 -0
- package/dist/types/fees/Fee.d.ts +3 -2
- package/dist/types/fees/FeeBreakdown.d.ts +3 -2
- package/dist/types/fees/PercentagePPM.d.ts +4 -2
- package/dist/types/fees/PercentagePPM.js +2 -1
- package/dist/types/lnurl/LNURLPay.d.ts +20 -12
- package/dist/types/lnurl/LNURLPay.js +8 -4
- package/dist/types/lnurl/LNURLWithdraw.d.ts +17 -10
- package/dist/types/lnurl/LNURLWithdraw.js +8 -4
- package/dist/types/wallets/LightningInvoiceCreateService.d.ts +24 -0
- package/dist/types/wallets/LightningInvoiceCreateService.js +15 -0
- package/dist/types/wallets/MinimalBitcoinWalletInterface.d.ts +3 -1
- package/dist/types/wallets/MinimalLightningNetworkWalletInterface.d.ts +4 -2
- package/dist/utils/BitcoinUtils.d.ts +1 -0
- package/dist/utils/BitcoinUtils.js +5 -1
- package/dist/utils/SwapUtils.d.ts +58 -1
- package/dist/utils/SwapUtils.js +55 -1
- package/dist/utils/TokenUtils.d.ts +10 -2
- package/dist/utils/TokenUtils.js +12 -4
- package/package.json +3 -3
- package/src/bitcoin/coinselect2/utils.ts +6 -0
- package/src/bitcoin/wallet/BitcoinWallet.ts +41 -5
- package/src/bitcoin/wallet/IBitcoinWallet.ts +57 -2
- package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +42 -6
- package/src/enums/FeeType.ts +8 -1
- package/src/enums/SwapAmountType.ts +7 -0
- package/src/enums/SwapDirection.ts +7 -0
- package/src/enums/SwapType.ts +62 -2
- package/src/errors/IntermediaryError.ts +4 -0
- package/src/errors/RequestError.ts +15 -1
- package/src/errors/UserError.ts +1 -0
- package/src/index.ts +12 -5
- package/src/intermediaries/Intermediary.ts +61 -14
- package/src/intermediaries/IntermediaryDiscovery.ts +69 -34
- package/src/prices/RedundantSwapPrice.ts +26 -6
- package/src/prices/SingleSwapPrice.ts +11 -8
- package/src/prices/SwapPriceWithChain.ts +63 -26
- package/src/prices/abstract/IPriceProvider.ts +4 -4
- package/src/prices/abstract/ISwapPrice.ts +115 -66
- package/src/prices/providers/BinancePriceProvider.ts +8 -1
- package/src/prices/providers/CoinGeckoPriceProvider.ts +7 -1
- package/src/prices/providers/CoinPaprikaPriceProvider.ts +7 -1
- package/src/prices/providers/CustomPriceProvider.ts +12 -1
- package/src/prices/providers/KrakenPriceProvider.ts +10 -1
- package/src/prices/providers/OKXPriceProvider.ts +7 -1
- package/src/prices/providers/abstract/ExchangePriceProvider.ts +3 -0
- package/src/storage/IUnifiedStorage.ts +19 -7
- package/src/storage/UnifiedSwapStorage.ts +33 -3
- package/src/storage-browser/IndexedDBUnifiedStorage.ts +31 -8
- package/src/storage-browser/LocalStorageManager.ts +25 -1
- package/src/swapper/Swapper.ts +599 -390
- package/src/swapper/SwapperFactory.ts +73 -24
- package/src/swapper/SwapperUtils.ts +107 -60
- package/src/swapper/SwapperWithChain.ts +320 -81
- package/src/swapper/SwapperWithSigner.ts +263 -56
- package/src/swaps/IAddressSwap.ts +13 -3
- package/src/swaps/IBTCWalletSwap.ts +26 -10
- package/src/swaps/IClaimableSwap.ts +41 -6
- package/src/swaps/IClaimableSwapWrapper.ts +11 -2
- package/src/swaps/IRefundableSwap.ts +34 -5
- package/src/swaps/ISwap.ts +224 -85
- package/src/swaps/ISwapWithGasDrop.ts +8 -2
- package/src/swaps/ISwapWrapper.ts +216 -98
- package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +64 -18
- package/src/swaps/escrow_swaps/IEscrowSwap.ts +83 -37
- package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +61 -30
- package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +37 -19
- package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +123 -50
- package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +24 -11
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +562 -258
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +156 -62
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +592 -227
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +177 -74
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +483 -245
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +141 -59
- package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +350 -195
- package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +48 -23
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +87 -40
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +110 -110
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +89 -34
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +101 -31
- package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +556 -259
- package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +292 -148
- package/src/swaps/trusted/ln/LnForGasSwap.ts +186 -47
- package/src/swaps/trusted/ln/LnForGasWrapper.ts +34 -15
- package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +262 -88
- package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +41 -19
- package/src/types/AmountData.ts +2 -1
- package/src/types/CustomPriceFunction.ts +8 -2
- package/src/types/PriceInfoType.ts +4 -4
- package/src/types/SwapExecutionAction.ts +97 -5
- package/src/types/SwapWithSigner.ts +8 -4
- package/src/types/Token.ts +12 -5
- package/src/types/TokenAmount.ts +3 -0
- package/src/types/fees/Fee.ts +3 -2
- package/src/types/fees/FeeBreakdown.ts +3 -2
- package/src/types/fees/PercentagePPM.ts +4 -2
- package/src/types/lnurl/LNURLPay.ts +20 -12
- package/src/types/lnurl/LNURLWithdraw.ts +17 -10
- package/src/types/wallets/LightningInvoiceCreateService.ts +30 -0
- package/src/types/wallets/MinimalBitcoinWalletInterface.ts +3 -1
- package/src/types/wallets/MinimalLightningNetworkWalletInterface.ts +4 -2
- package/src/utils/BitcoinUtils.ts +5 -0
- package/src/utils/SwapUtils.ts +63 -1
- package/src/utils/TokenUtils.ts +12 -4
- package/dist/bitcoin/BitcoinRpcWithAddressIndex.d.ts +0 -68
- package/dist/bitcoin/BitcoinRpcWithAddressIndex.js +0 -2
- package/dist/bitcoin/LightningNetworkApi.d.ts +0 -12
- package/dist/bitcoin/LightningNetworkApi.js +0 -2
- package/dist/bitcoin/mempool/MempoolApi.d.ts +0 -350
- package/dist/bitcoin/mempool/MempoolApi.js +0 -311
- package/dist/bitcoin/mempool/MempoolBitcoinBlock.d.ts +0 -44
- package/dist/bitcoin/mempool/MempoolBitcoinBlock.js +0 -48
- package/dist/bitcoin/mempool/MempoolBitcoinRpc.d.ts +0 -119
- package/dist/bitcoin/mempool/MempoolBitcoinRpc.js +0 -361
- package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.d.ts +0 -22
- package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.js +0 -105
- package/dist/errors/PaymentAuthError.d.ts +0 -11
- package/dist/errors/PaymentAuthError.js +0 -23
- package/src/errors/PaymentAuthError.ts +0 -26
|
@@ -4,7 +4,8 @@ import {PriceInfoType} from "../../types/PriceInfoType";
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Abstract base class for swap pricing implementations
|
|
7
|
-
*
|
|
7
|
+
*
|
|
8
|
+
* @category Pricing
|
|
8
9
|
*/
|
|
9
10
|
export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
10
11
|
|
|
@@ -15,46 +16,55 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
|
-
* Gets the decimal places for a given token, returns
|
|
19
|
-
*
|
|
20
|
-
* @param
|
|
19
|
+
* Gets the decimal places for a given token, returns `-1` if token should be ignored & `null` if token is not found
|
|
20
|
+
*
|
|
21
|
+
* @param chainIdentifier Chain identifier of the smart chain
|
|
22
|
+
* @param tokenAddress Token address
|
|
21
23
|
* @protected
|
|
22
24
|
*/
|
|
23
|
-
protected abstract getDecimals<C extends ChainIds<T>>(chainIdentifier: C,
|
|
25
|
+
protected abstract getDecimals<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string): number | null;
|
|
24
26
|
|
|
25
27
|
/**
|
|
26
28
|
* Returns the price of the token in BTC uSats (microSats)
|
|
27
29
|
*
|
|
28
|
-
* @param chainIdentifier
|
|
29
|
-
* @param
|
|
30
|
+
* @param chainIdentifier Chain identifier of the smart chain
|
|
31
|
+
* @param tokenAddress Token address
|
|
30
32
|
* @param abortSignal
|
|
31
33
|
* @protected
|
|
32
34
|
*/
|
|
33
|
-
protected abstract getPrice<C extends ChainIds<T>>(chainIdentifier: C,
|
|
35
|
+
protected abstract getPrice<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string, abortSignal?: AbortSignal): Promise<bigint>;
|
|
34
36
|
|
|
35
37
|
/**
|
|
36
|
-
* Returns the price of bitcoin in USD
|
|
38
|
+
* Returns the price of bitcoin in USD (sats/USD)
|
|
37
39
|
*
|
|
38
40
|
* @param abortSignal
|
|
39
41
|
* @protected
|
|
40
42
|
*/
|
|
41
43
|
protected abstract getUsdPrice(abortSignal?: AbortSignal): Promise<number>;
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Gets the decimal places for a given token, returns `-1` if token should be ignored & throws if token is not found
|
|
47
|
+
*
|
|
48
|
+
* @param chainIdentifier Chain identifier of the smart chain
|
|
49
|
+
* @param tokenAddress Token address
|
|
50
|
+
* @throws {Error} When token is not known
|
|
51
|
+
* @protected
|
|
52
|
+
*/
|
|
53
|
+
protected getDecimalsThrowing<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string): number {
|
|
54
|
+
const decimals = this.getDecimals(chainIdentifier, tokenAddress);
|
|
55
|
+
if(decimals==null) throw new Error(`Cannot get decimal count for token ${chainIdentifier}:${tokenAddress}!`);
|
|
46
56
|
return decimals;
|
|
47
57
|
}
|
|
48
58
|
|
|
49
59
|
/**
|
|
50
60
|
* Recomputes pricing info without fetching the current price
|
|
51
61
|
*
|
|
52
|
-
* @param chainIdentifier
|
|
53
|
-
* @param amountSats
|
|
54
|
-
* @param satsBaseFee
|
|
55
|
-
* @param feePPM
|
|
56
|
-
* @param paidToken
|
|
57
|
-
* @param
|
|
62
|
+
* @param chainIdentifier Chain identifier of the smart chain
|
|
63
|
+
* @param amountSats Amount of sats (BTC) to be received from the swap
|
|
64
|
+
* @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
|
|
65
|
+
* @param feePPM PPM fee rate as reported by the intermediary
|
|
66
|
+
* @param paidToken Amount of token to be paid to the swap
|
|
67
|
+
* @param tokenAddress Token address to be paid
|
|
58
68
|
*/
|
|
59
69
|
public recomputePriceInfoSend<C extends ChainIds<T>>(
|
|
60
70
|
chainIdentifier: C,
|
|
@@ -62,19 +72,19 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
|
62
72
|
satsBaseFee: bigint,
|
|
63
73
|
feePPM: bigint,
|
|
64
74
|
paidToken: bigint,
|
|
65
|
-
|
|
75
|
+
tokenAddress: string
|
|
66
76
|
): PriceInfoType {
|
|
67
77
|
const totalSats = (amountSats * (1000000n + feePPM) / 1000000n)
|
|
68
78
|
+ satsBaseFee;
|
|
69
79
|
const totalUSats = totalSats * 1000000n;
|
|
70
|
-
const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier,
|
|
80
|
+
const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / paidToken;
|
|
71
81
|
|
|
72
82
|
return {
|
|
73
83
|
isValid: true,
|
|
74
84
|
differencePPM: 0n,
|
|
75
85
|
satsBaseFee,
|
|
76
86
|
feePPM,
|
|
77
|
-
realPriceUSatPerToken: this.shouldIgnore(chainIdentifier,
|
|
87
|
+
realPriceUSatPerToken: this.shouldIgnore(chainIdentifier, tokenAddress) ? undefined : swapPriceUSatPerToken,
|
|
78
88
|
swapPriceUSatPerToken
|
|
79
89
|
};
|
|
80
90
|
}
|
|
@@ -82,14 +92,14 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
|
82
92
|
/**
|
|
83
93
|
* Checks whether the swap amounts are valid given the current market rate for a given pair
|
|
84
94
|
*
|
|
85
|
-
* @param chainIdentifier
|
|
95
|
+
* @param chainIdentifier Chain identifier of the smart chain
|
|
86
96
|
* @param amountSats Amount of sats (BTC) to be received from the swap
|
|
87
97
|
* @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
|
|
88
98
|
* @param feePPM PPM fee rate as reported by the intermediary
|
|
89
99
|
* @param paidToken Amount of token to be paid to the swap
|
|
90
|
-
* @param
|
|
100
|
+
* @param tokenAddress Token address to be paid
|
|
91
101
|
* @param abortSignal
|
|
92
|
-
* @param preFetchedPrice
|
|
102
|
+
* @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
|
|
93
103
|
*/
|
|
94
104
|
public async isValidAmountSend<C extends ChainIds<T>>(
|
|
95
105
|
chainIdentifier: C,
|
|
@@ -97,16 +107,16 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
|
97
107
|
satsBaseFee: bigint,
|
|
98
108
|
feePPM: bigint,
|
|
99
109
|
paidToken: bigint,
|
|
100
|
-
|
|
110
|
+
tokenAddress: string,
|
|
101
111
|
abortSignal?: AbortSignal,
|
|
102
112
|
preFetchedPrice?: bigint | null
|
|
103
113
|
): Promise<PriceInfoType> {
|
|
104
114
|
const totalSats = (amountSats * (1000000n + feePPM) / 1000000n)
|
|
105
115
|
+ satsBaseFee;
|
|
106
116
|
const totalUSats = totalSats * 1000000n;
|
|
107
|
-
const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier,
|
|
117
|
+
const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / paidToken;
|
|
108
118
|
|
|
109
|
-
if(this.shouldIgnore(chainIdentifier,
|
|
119
|
+
if(this.shouldIgnore(chainIdentifier, tokenAddress)) return {
|
|
110
120
|
isValid: true,
|
|
111
121
|
differencePPM: 0n,
|
|
112
122
|
satsBaseFee,
|
|
@@ -115,8 +125,8 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
|
115
125
|
swapPriceUSatPerToken
|
|
116
126
|
};
|
|
117
127
|
|
|
118
|
-
const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats,
|
|
119
|
-
const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier,
|
|
128
|
+
const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats, tokenAddress, abortSignal, preFetchedPrice);
|
|
129
|
+
const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / calculatedAmtInToken;
|
|
120
130
|
|
|
121
131
|
const difference = paidToken - calculatedAmtInToken; //Will be >0 if we need to pay more than we should've
|
|
122
132
|
const differencePPM = difference * 1000000n / calculatedAmtInToken;
|
|
@@ -134,12 +144,12 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
|
134
144
|
/**
|
|
135
145
|
* Recomputes pricing info without fetching the current price
|
|
136
146
|
*
|
|
137
|
-
* @param chainIdentifier
|
|
138
|
-
* @param amountSats
|
|
139
|
-
* @param satsBaseFee
|
|
140
|
-
* @param feePPM
|
|
141
|
-
* @param receiveToken
|
|
142
|
-
* @param
|
|
147
|
+
* @param chainIdentifier Chain identifier of the smart chain
|
|
148
|
+
* @param amountSats Amount of sats (BTC) to be paid to the swap
|
|
149
|
+
* @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
|
|
150
|
+
* @param feePPM PPM fee rate as reported by the intermediary
|
|
151
|
+
* @param receiveToken Amount of token to be received from the swap
|
|
152
|
+
* @param tokenAddress Token address to be received
|
|
143
153
|
*/
|
|
144
154
|
public recomputePriceInfoReceive<C extends ChainIds<T>>(
|
|
145
155
|
chainIdentifier: C,
|
|
@@ -147,19 +157,19 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
|
147
157
|
satsBaseFee: bigint,
|
|
148
158
|
feePPM: bigint,
|
|
149
159
|
receiveToken: bigint,
|
|
150
|
-
|
|
160
|
+
tokenAddress: string,
|
|
151
161
|
): PriceInfoType {
|
|
152
162
|
const totalSats = (amountSats * (1000000n - feePPM) / 1000000n)
|
|
153
163
|
- satsBaseFee;
|
|
154
164
|
const totalUSats = totalSats * 1000000n;
|
|
155
|
-
const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier,
|
|
165
|
+
const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / receiveToken;
|
|
156
166
|
|
|
157
167
|
return {
|
|
158
168
|
isValid: true,
|
|
159
169
|
differencePPM: 0n,
|
|
160
170
|
satsBaseFee,
|
|
161
171
|
feePPM,
|
|
162
|
-
realPriceUSatPerToken: this.shouldIgnore(chainIdentifier,
|
|
172
|
+
realPriceUSatPerToken: this.shouldIgnore(chainIdentifier, tokenAddress) ? undefined : swapPriceUSatPerToken,
|
|
163
173
|
swapPriceUSatPerToken
|
|
164
174
|
};
|
|
165
175
|
}
|
|
@@ -167,14 +177,14 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
|
167
177
|
/**
|
|
168
178
|
* Checks whether the swap amounts are valid given the current market rate for a given pair
|
|
169
179
|
*
|
|
170
|
-
* @param chainIdentifier
|
|
180
|
+
* @param chainIdentifier Chain identifier of the smart chain
|
|
171
181
|
* @param amountSats Amount of sats (BTC) to be paid to the swap
|
|
172
182
|
* @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
|
|
173
183
|
* @param feePPM PPM fee rate as reported by the intermediary
|
|
174
184
|
* @param receiveToken Amount of token to be received from the swap
|
|
175
|
-
* @param
|
|
185
|
+
* @param tokenAddress Token address to be received
|
|
176
186
|
* @param abortSignal
|
|
177
|
-
* @param preFetchedPrice
|
|
187
|
+
* @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
|
|
178
188
|
*/
|
|
179
189
|
public async isValidAmountReceive<C extends ChainIds<T>>(
|
|
180
190
|
chainIdentifier: C,
|
|
@@ -182,16 +192,16 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
|
182
192
|
satsBaseFee: bigint,
|
|
183
193
|
feePPM: bigint,
|
|
184
194
|
receiveToken: bigint,
|
|
185
|
-
|
|
195
|
+
tokenAddress: string,
|
|
186
196
|
abortSignal?: AbortSignal,
|
|
187
197
|
preFetchedPrice?: bigint | null
|
|
188
198
|
): Promise<PriceInfoType> {
|
|
189
199
|
const totalSats = (amountSats * (1000000n - feePPM) / 1000000n)
|
|
190
200
|
- satsBaseFee;
|
|
191
201
|
const totalUSats = totalSats * 1000000n;
|
|
192
|
-
const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier,
|
|
202
|
+
const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / receiveToken;
|
|
193
203
|
|
|
194
|
-
if(this.shouldIgnore(chainIdentifier,
|
|
204
|
+
if(this.shouldIgnore(chainIdentifier, tokenAddress)) return {
|
|
195
205
|
isValid: true,
|
|
196
206
|
differencePPM: 0n,
|
|
197
207
|
satsBaseFee,
|
|
@@ -200,8 +210,8 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
|
200
210
|
swapPriceUSatPerToken
|
|
201
211
|
};
|
|
202
212
|
|
|
203
|
-
const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats,
|
|
204
|
-
const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier,
|
|
213
|
+
const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats, tokenAddress, abortSignal, preFetchedPrice);
|
|
214
|
+
const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / calculatedAmtInToken;
|
|
205
215
|
|
|
206
216
|
const difference = calculatedAmtInToken - receiveToken; //Will be >0 if we receive less than we should've
|
|
207
217
|
const differencePPM = difference * 100000n / calculatedAmtInToken;
|
|
@@ -216,22 +226,36 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
|
216
226
|
};
|
|
217
227
|
}
|
|
218
228
|
|
|
219
|
-
|
|
220
|
-
|
|
229
|
+
/**
|
|
230
|
+
* Pre-fetches the pricing data for a given token, such that further calls to {@link isValidAmountReceive} or
|
|
231
|
+
* {@link isValidAmountSend} are quicker and don't need to wait for the price fetch
|
|
232
|
+
*
|
|
233
|
+
* @param chainIdentifier Chain identifier of the smart chain
|
|
234
|
+
* @param tokenAddress Token address
|
|
235
|
+
* @param abortSignal
|
|
236
|
+
*/
|
|
237
|
+
public preFetchPrice<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string, abortSignal?: AbortSignal): Promise<bigint> {
|
|
238
|
+
return this.getPrice(chainIdentifier, tokenAddress, abortSignal);
|
|
221
239
|
}
|
|
222
240
|
|
|
241
|
+
/**
|
|
242
|
+
* Pre-fetches the Bitcoin USD price data, such that further calls to {@link getBtcUsdValue},
|
|
243
|
+
* {@link getTokenUsdValue} or {@link getUsdValue} are quicker and don't need to wait for the price fetch
|
|
244
|
+
*
|
|
245
|
+
* @param abortSignal
|
|
246
|
+
*/
|
|
223
247
|
public preFetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
224
248
|
return this.getUsdPrice(abortSignal);
|
|
225
249
|
}
|
|
226
250
|
|
|
227
251
|
/**
|
|
228
|
-
* Returns amount of
|
|
252
|
+
* Returns amount of `toToken` that is equivalent to `fromAmount` satoshis
|
|
229
253
|
*
|
|
230
|
-
* @param chainIdentifier
|
|
231
|
-
* @param fromAmount
|
|
232
|
-
* @param toToken
|
|
254
|
+
* @param chainIdentifier Chain identifier string for the smart chain
|
|
255
|
+
* @param fromAmount Amount of satoshis
|
|
256
|
+
* @param toToken Token address
|
|
233
257
|
* @param abortSignal
|
|
234
|
-
* @param preFetchedPrice
|
|
258
|
+
* @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
|
|
235
259
|
* @throws {Error} when token is not found
|
|
236
260
|
*/
|
|
237
261
|
public async getFromBtcSwapAmount<C extends ChainIds<T>>(
|
|
@@ -252,13 +276,13 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
|
252
276
|
}
|
|
253
277
|
|
|
254
278
|
/**
|
|
255
|
-
* Returns amount of satoshis that are equivalent to
|
|
279
|
+
* Returns amount of satoshis that are equivalent to `fromAmount` of `fromToken`
|
|
256
280
|
*
|
|
257
|
-
* @param chainIdentifier
|
|
281
|
+
* @param chainIdentifier Chain identifier string for the smart chain
|
|
258
282
|
* @param fromAmount Amount of the token
|
|
259
|
-
* @param fromToken Token
|
|
283
|
+
* @param fromToken Token address
|
|
260
284
|
* @param abortSignal
|
|
261
|
-
* @param preFetchedPrice
|
|
285
|
+
* @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
|
|
262
286
|
* @throws {Error} when token is not found
|
|
263
287
|
*/
|
|
264
288
|
public async getToBtcSwapAmount<C extends ChainIds<T>>(
|
|
@@ -280,8 +304,9 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
|
280
304
|
|
|
281
305
|
/**
|
|
282
306
|
* Returns whether the token should be ignored and pricing for it not calculated
|
|
283
|
-
*
|
|
284
|
-
* @param
|
|
307
|
+
*
|
|
308
|
+
* @param chainIdentifier Chain identifier string for the smart chain
|
|
309
|
+
* @param tokenAddress Token address
|
|
285
310
|
* @throws {Error} if token is not found
|
|
286
311
|
*/
|
|
287
312
|
public shouldIgnore<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string): boolean {
|
|
@@ -290,28 +315,52 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
|
290
315
|
return coin===-1;
|
|
291
316
|
}
|
|
292
317
|
|
|
318
|
+
/**
|
|
319
|
+
* Returns the USD value of the bitcoin amount
|
|
320
|
+
*
|
|
321
|
+
* @param btcSats Bitcoin amount in satoshis
|
|
322
|
+
* @param abortSignal
|
|
323
|
+
* @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
|
|
324
|
+
*/
|
|
293
325
|
public async getBtcUsdValue(
|
|
294
326
|
btcSats: bigint,
|
|
295
327
|
abortSignal?: AbortSignal,
|
|
296
|
-
|
|
328
|
+
preFetchedUsdPrice?: number
|
|
297
329
|
): Promise<number> {
|
|
298
|
-
return Number(btcSats)*(
|
|
330
|
+
return Number(btcSats)*(preFetchedUsdPrice || await this.getUsdPrice(abortSignal));
|
|
299
331
|
}
|
|
300
332
|
|
|
333
|
+
/**
|
|
334
|
+
* Returns the USD value of the smart chain token amount
|
|
335
|
+
*
|
|
336
|
+
* @param chainIdentifier Chain identifier string for the smart chain
|
|
337
|
+
* @param tokenAmount Amount of the token in base units
|
|
338
|
+
* @param tokenAddress Token address
|
|
339
|
+
* @param abortSignal
|
|
340
|
+
* @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
|
|
341
|
+
*/
|
|
301
342
|
public async getTokenUsdValue<C extends ChainIds<T>>(
|
|
302
|
-
|
|
343
|
+
chainIdentifier: C,
|
|
303
344
|
tokenAmount: bigint,
|
|
304
|
-
|
|
345
|
+
tokenAddress: string,
|
|
305
346
|
abortSignal?: AbortSignal,
|
|
306
|
-
|
|
347
|
+
preFetchedUsdPrice?: number
|
|
307
348
|
): Promise<number> {
|
|
308
349
|
const [btcAmount, usdPrice] = await Promise.all([
|
|
309
|
-
this.getToBtcSwapAmount(
|
|
310
|
-
|
|
350
|
+
this.getToBtcSwapAmount(chainIdentifier, tokenAmount, tokenAddress, abortSignal),
|
|
351
|
+
preFetchedUsdPrice==null ? this.preFetchUsdPrice(abortSignal) : Promise.resolve(preFetchedUsdPrice)
|
|
311
352
|
]);
|
|
312
353
|
return Number(btcAmount)*usdPrice;
|
|
313
354
|
}
|
|
314
355
|
|
|
356
|
+
/**
|
|
357
|
+
* Returns the USD value of the token amount
|
|
358
|
+
*
|
|
359
|
+
* @param amount Amount in base units of the token
|
|
360
|
+
* @param token Token to fetch the usd price for
|
|
361
|
+
* @param abortSignal
|
|
362
|
+
* @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
|
|
363
|
+
*/
|
|
315
364
|
public getUsdValue<C extends ChainIds<T>>(
|
|
316
365
|
amount: bigint,
|
|
317
366
|
token: Token<C>,
|
|
@@ -10,7 +10,8 @@ export type BinanceResponse = {
|
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Price provider using Binance exchange API
|
|
13
|
-
*
|
|
13
|
+
*
|
|
14
|
+
* @category Pricing
|
|
14
15
|
*/
|
|
15
16
|
export class BinancePriceProvider<T extends MultiChain> extends ExchangePriceProvider<T> {
|
|
16
17
|
|
|
@@ -18,6 +19,9 @@ export class BinancePriceProvider<T extends MultiChain> extends ExchangePricePro
|
|
|
18
19
|
super(coinsMap, url, httpRequestTimeout);
|
|
19
20
|
}
|
|
20
21
|
|
|
22
|
+
/**
|
|
23
|
+
* @inheritDoc
|
|
24
|
+
*/
|
|
21
25
|
protected async fetchPair(pair: string, abortSignal?: AbortSignal) {
|
|
22
26
|
const response = await httpGet<BinanceResponse>(
|
|
23
27
|
this.url+"/ticker/price?symbol="+pair,
|
|
@@ -28,6 +32,9 @@ export class BinancePriceProvider<T extends MultiChain> extends ExchangePricePro
|
|
|
28
32
|
return parseFloat(response.price);
|
|
29
33
|
}
|
|
30
34
|
|
|
35
|
+
/**
|
|
36
|
+
* @inheritDoc
|
|
37
|
+
*/
|
|
31
38
|
protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
32
39
|
const response = await httpGet<BinanceResponse>(
|
|
33
40
|
this.url+"/ticker/price?symbol=BTCUSDC",
|
|
@@ -9,7 +9,7 @@ export type CoinGeckoResponse<Currency extends string> = {
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Price provider using CoinGecko API
|
|
12
|
-
* @category Pricing
|
|
12
|
+
* @category Pricing
|
|
13
13
|
*/
|
|
14
14
|
export class CoinGeckoPriceProvider<T extends MultiChain> extends HttpPriceProvider<T> {
|
|
15
15
|
|
|
@@ -17,6 +17,9 @@ export class CoinGeckoPriceProvider<T extends MultiChain> extends HttpPriceProvi
|
|
|
17
17
|
super(coinsMap, url, httpRequestTimeout);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
/**
|
|
21
|
+
* @inheritDoc
|
|
22
|
+
*/
|
|
20
23
|
protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
|
|
21
24
|
let response = await httpGet<CoinGeckoResponse<"sats">>(
|
|
22
25
|
this.url+"/simple/price?ids="+token.coinId+"&vs_currencies=sats&precision=6",
|
|
@@ -27,6 +30,9 @@ export class CoinGeckoPriceProvider<T extends MultiChain> extends HttpPriceProvi
|
|
|
27
30
|
return BigInt(response[token.coinId].sats*1000000);
|
|
28
31
|
}
|
|
29
32
|
|
|
33
|
+
/**
|
|
34
|
+
* @inheritDoc
|
|
35
|
+
*/
|
|
30
36
|
protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
31
37
|
let response = await httpGet<CoinGeckoResponse<"usd">>(
|
|
32
38
|
this.url+"/simple/price?ids=bitcoin&vs_currencies=usd&precision=9",
|
|
@@ -13,7 +13,7 @@ export type CoinPaprikaResponse<Currency extends string> = {
|
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Price provider using CoinPaprika API
|
|
16
|
-
* @category Pricing
|
|
16
|
+
* @category Pricing
|
|
17
17
|
*/
|
|
18
18
|
export class CoinPaprikaPriceProvider<T extends MultiChain> extends HttpPriceProvider<T> {
|
|
19
19
|
|
|
@@ -21,6 +21,9 @@ export class CoinPaprikaPriceProvider<T extends MultiChain> extends HttpPricePro
|
|
|
21
21
|
super(coinsMap, url, httpRequestTimeout);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
/**
|
|
25
|
+
* @inheritDoc
|
|
26
|
+
*/
|
|
24
27
|
async fetchPrice(token: CoinType, abortSignal?: AbortSignal) {
|
|
25
28
|
const response = await httpGet<CoinPaprikaResponse<"BTC">>(
|
|
26
29
|
this.url+"/tickers/"+token.coinId+"?quotes=BTC",
|
|
@@ -31,6 +34,9 @@ export class CoinPaprikaPriceProvider<T extends MultiChain> extends HttpPricePro
|
|
|
31
34
|
return BigInt(Math.floor(response.quotes.BTC.price*100000000000000));
|
|
32
35
|
}
|
|
33
36
|
|
|
37
|
+
/**
|
|
38
|
+
* @inheritDoc
|
|
39
|
+
*/
|
|
34
40
|
protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
35
41
|
const response = await httpGet<CoinPaprikaResponse<"USD">>(
|
|
36
42
|
this.url+"/tickers/btc-bitcoin?quotes=USD",
|
|
@@ -4,23 +4,34 @@ import {CustomPriceFunction} from "../../types/CustomPriceFunction";
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Price provider using custom pricing function
|
|
7
|
-
*
|
|
7
|
+
*
|
|
8
|
+
* @category Pricing
|
|
8
9
|
*/
|
|
9
10
|
export class CustomPriceProvider<T extends MultiChain> extends IPriceProvider<T> {
|
|
10
11
|
|
|
11
12
|
readonly getUsdPriceFn: CustomPriceFunction;
|
|
12
13
|
|
|
14
|
+
/**
|
|
15
|
+
* @param coinsMap Mapping of token tickers to token addresses
|
|
16
|
+
* @param getUsdPriceFn Pricing function, used to retrieve USD prices of the tokens
|
|
17
|
+
*/
|
|
13
18
|
constructor(coinsMap: CtorCoinTypes<T>, getUsdPriceFn: CustomPriceFunction) {
|
|
14
19
|
super(coinsMap);
|
|
15
20
|
this.getUsdPriceFn = getUsdPriceFn;
|
|
16
21
|
}
|
|
17
22
|
|
|
23
|
+
/**
|
|
24
|
+
* @inheritDoc
|
|
25
|
+
*/
|
|
18
26
|
protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
|
|
19
27
|
const [btcPrice, tokenPrice] = await this.getUsdPriceFn(["BTC",token.coinId], abortSignal);
|
|
20
28
|
const priceInBtc = tokenPrice / btcPrice;
|
|
21
29
|
return BigInt(Math.floor(priceInBtc*100_000_000*1_000_000));
|
|
22
30
|
}
|
|
23
31
|
|
|
32
|
+
/**
|
|
33
|
+
* @inheritDoc
|
|
34
|
+
*/
|
|
24
35
|
protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
25
36
|
const [btcPrice] = await this.getUsdPriceFn(["BTC"], abortSignal);
|
|
26
37
|
return btcPrice / 100_000_000;
|
|
@@ -22,7 +22,7 @@ export type KrakenResponse = {
|
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Price provider using Kraken exchange API
|
|
25
|
-
* @category Pricing
|
|
25
|
+
* @category Pricing
|
|
26
26
|
*/
|
|
27
27
|
export class KrakenPriceProvider<T extends MultiChain> extends ExchangePriceProvider<T> {
|
|
28
28
|
|
|
@@ -30,6 +30,9 @@ export class KrakenPriceProvider<T extends MultiChain> extends ExchangePriceProv
|
|
|
30
30
|
super(coinsMap, url, httpRequestTimeout);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
/**
|
|
34
|
+
* @inheritDoc
|
|
35
|
+
*/
|
|
33
36
|
protected async fetchPair(pair: string, abortSignal?: AbortSignal) {
|
|
34
37
|
const response = await httpGet<KrakenResponse>(
|
|
35
38
|
this.url+"/public/Ticker?pair="+pair,
|
|
@@ -40,6 +43,9 @@ export class KrakenPriceProvider<T extends MultiChain> extends ExchangePriceProv
|
|
|
40
43
|
return parseFloat(response.result[pair].c[0]);
|
|
41
44
|
}
|
|
42
45
|
|
|
46
|
+
/**
|
|
47
|
+
* @inheritDoc
|
|
48
|
+
*/
|
|
43
49
|
protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
44
50
|
const response = await httpGet<KrakenResponse>(
|
|
45
51
|
this.url+"/public/Ticker?pair=XBTUSDC",
|
|
@@ -50,6 +56,9 @@ export class KrakenPriceProvider<T extends MultiChain> extends ExchangePriceProv
|
|
|
50
56
|
return parseFloat(response.result["XBTUSDC"].c[0])/100000000;
|
|
51
57
|
}
|
|
52
58
|
|
|
59
|
+
/**
|
|
60
|
+
* @inheritDoc
|
|
61
|
+
*/
|
|
53
62
|
protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
|
|
54
63
|
const pairs: string[] = token.coinId.split(";");
|
|
55
64
|
|
|
@@ -22,7 +22,7 @@ export type OKXResponse = {
|
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Price provider using OKX exchange API
|
|
25
|
-
* @category Pricing
|
|
25
|
+
* @category Pricing
|
|
26
26
|
*/
|
|
27
27
|
export class OKXPriceProvider<T extends MultiChain> extends ExchangePriceProvider<T> {
|
|
28
28
|
|
|
@@ -30,6 +30,9 @@ export class OKXPriceProvider<T extends MultiChain> extends ExchangePriceProvide
|
|
|
30
30
|
super(coinsMap, url, httpRequestTimeout);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
/**
|
|
34
|
+
* @inheritDoc
|
|
35
|
+
*/
|
|
33
36
|
async fetchPair(pair: string, abortSignal?: AbortSignal) {
|
|
34
37
|
const response = await httpGet<OKXResponse>(
|
|
35
38
|
this.url+"/market/index-tickers?instId="+pair,
|
|
@@ -40,6 +43,9 @@ export class OKXPriceProvider<T extends MultiChain> extends ExchangePriceProvide
|
|
|
40
43
|
return parseFloat(response.data[0].idxPx);
|
|
41
44
|
}
|
|
42
45
|
|
|
46
|
+
/**
|
|
47
|
+
* @inheritDoc
|
|
48
|
+
*/
|
|
43
49
|
protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
44
50
|
const response = await httpGet<OKXResponse>(
|
|
45
51
|
this.url+"/market/index-tickers?instId=BTC-USD",
|
|
@@ -13,6 +13,9 @@ export abstract class ExchangePriceProvider<T extends MultiChain> extends HttpPr
|
|
|
13
13
|
*/
|
|
14
14
|
protected abstract fetchPair(pair: string, abortSignal?: AbortSignal): Promise<number>;
|
|
15
15
|
|
|
16
|
+
/**
|
|
17
|
+
* @inheritDoc
|
|
18
|
+
*/
|
|
16
19
|
protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
|
|
17
20
|
const pairs: string[] = token.coinId.split(";");
|
|
18
21
|
const prices: number[] = await Promise.all(pairs.map(pair => {
|
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Params for querying the storage
|
|
4
|
+
*
|
|
4
5
|
* @category Storage
|
|
5
6
|
*/
|
|
6
7
|
export type QueryParams = {
|
|
8
|
+
/**
|
|
9
|
+
* Key that should be matched
|
|
10
|
+
*/
|
|
7
11
|
key: string,
|
|
12
|
+
/**
|
|
13
|
+
* A value that the key needs to have, if an array is passed, the conditions are `OR`-ed
|
|
14
|
+
*/
|
|
8
15
|
value: any | any[]
|
|
9
16
|
};
|
|
10
17
|
|
|
11
18
|
/**
|
|
12
|
-
* Base type for stored objects
|
|
19
|
+
* Base type for stored objects, every storage object MUST have an `id` field
|
|
20
|
+
*
|
|
13
21
|
* @category Storage
|
|
14
22
|
*/
|
|
15
23
|
export type UnifiedStoredObject = {id: string} & any;
|
|
16
24
|
|
|
17
25
|
/**
|
|
18
26
|
* Defines simple indexes (for queries that use a single key)
|
|
27
|
+
*
|
|
19
28
|
* @category Storage
|
|
20
29
|
*/
|
|
21
30
|
export type UnifiedStorageIndexes = readonly {
|
|
@@ -27,6 +36,7 @@ export type UnifiedStorageIndexes = readonly {
|
|
|
27
36
|
|
|
28
37
|
/**
|
|
29
38
|
* Defines composite indexes (for queries that use multiple keys)
|
|
39
|
+
*
|
|
30
40
|
* @category Storage
|
|
31
41
|
*/
|
|
32
42
|
export type UnifiedStorageCompositeIndexes = readonly {
|
|
@@ -35,13 +45,15 @@ export type UnifiedStorageCompositeIndexes = readonly {
|
|
|
35
45
|
}[];
|
|
36
46
|
|
|
37
47
|
/**
|
|
38
|
-
* Interface for unified storage implementations
|
|
48
|
+
* Interface for a generic unified storage implementations
|
|
49
|
+
*
|
|
39
50
|
* @category Storage
|
|
40
51
|
*/
|
|
41
52
|
export interface IUnifiedStorage<I extends UnifiedStorageIndexes, C extends UnifiedStorageCompositeIndexes> {
|
|
42
53
|
|
|
43
54
|
/**
|
|
44
55
|
* Initializes the storage with given indexes and composite indexes
|
|
56
|
+
*
|
|
45
57
|
* @param indexes
|
|
46
58
|
* @param compositeIndexes
|
|
47
59
|
*/
|
|
@@ -58,25 +70,25 @@ export interface IUnifiedStorage<I extends UnifiedStorageIndexes, C extends Unif
|
|
|
58
70
|
|
|
59
71
|
/**
|
|
60
72
|
* Saves an object to storage, updating indexes as needed
|
|
61
|
-
* @param value
|
|
73
|
+
* @param value Object to save (must have an id property)
|
|
62
74
|
*/
|
|
63
75
|
save(value: UnifiedStoredObject): Promise<void>;
|
|
64
76
|
|
|
65
77
|
/**
|
|
66
78
|
* Saves multiple objects to storage in a batch operation
|
|
67
|
-
* @param value
|
|
79
|
+
* @param value Array of objects to save
|
|
68
80
|
*/
|
|
69
81
|
saveAll(value: UnifiedStoredObject[]): Promise<void>;
|
|
70
82
|
|
|
71
83
|
/**
|
|
72
84
|
* Removes an object from storage
|
|
73
|
-
* @param value
|
|
85
|
+
* @param value Object to remove (must have an id property)
|
|
74
86
|
*/
|
|
75
87
|
remove(value: UnifiedStoredObject): Promise<void>;
|
|
76
88
|
|
|
77
89
|
/**
|
|
78
90
|
* Removes multiple objects from storage in a batch operation
|
|
79
|
-
* @param value
|
|
91
|
+
* @param value Array of objects to remove
|
|
80
92
|
*/
|
|
81
93
|
removeAll(value: UnifiedStoredObject[]): Promise<void>;
|
|
82
94
|
|