@atomiqlabs/sdk 8.1.7 → 8.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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 +7 -0
- package/dist/enums/FeeType.js +7 -0
- 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 +4 -5
- package/dist/index.js +3 -4
- package/dist/intermediaries/Intermediary.d.ts +57 -10
- package/dist/intermediaries/Intermediary.js +37 -10
- package/dist/intermediaries/IntermediaryDiscovery.d.ts +55 -22
- package/dist/intermediaries/IntermediaryDiscovery.js +35 -22
- package/dist/prices/RedundantSwapPrice.d.ts +24 -3
- package/dist/prices/RedundantSwapPrice.js +21 -1
- package/dist/prices/SingleSwapPrice.d.ts +9 -6
- package/dist/prices/SingleSwapPrice.js +10 -7
- package/dist/prices/SwapPriceWithChain.d.ts +54 -16
- package/dist/prices/SwapPriceWithChain.js +58 -20
- package/dist/prices/abstract/ISwapPrice.d.ts +94 -45
- package/dist/prices/abstract/ISwapPrice.js +103 -55
- package/dist/prices/providers/BinancePriceProvider.d.ts +7 -0
- package/dist/prices/providers/BinancePriceProvider.js +7 -0
- package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +6 -0
- package/dist/prices/providers/CoinGeckoPriceProvider.js +6 -0
- package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +6 -0
- package/dist/prices/providers/CoinPaprikaPriceProvider.js +6 -0
- package/dist/prices/providers/CustomPriceProvider.d.ts +11 -0
- package/dist/prices/providers/CustomPriceProvider.js +11 -0
- package/dist/prices/providers/KrakenPriceProvider.d.ts +9 -0
- package/dist/prices/providers/KrakenPriceProvider.js +9 -0
- package/dist/prices/providers/OKXPriceProvider.d.ts +6 -0
- package/dist/prices/providers/OKXPriceProvider.js +6 -0
- 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 +303 -222
- package/dist/swapper/Swapper.js +376 -344
- package/dist/swapper/SwapperFactory.d.ts +41 -17
- package/dist/swapper/SwapperFactory.js +23 -2
- 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 +10 -1
- package/dist/swaps/IAddressSwap.js +2 -1
- package/dist/swaps/IBTCWalletSwap.d.ts +24 -6
- package/dist/swaps/IBTCWalletSwap.js +2 -1
- package/dist/swaps/IClaimableSwap.d.ts +36 -4
- package/dist/swaps/IClaimableSwap.js +2 -1
- package/dist/swaps/IClaimableSwapWrapper.d.ts +11 -1
- package/dist/swaps/IRefundableSwap.d.ts +29 -3
- package/dist/swaps/IRefundableSwap.js +2 -1
- package/dist/swaps/ISwap.d.ts +159 -21
- package/dist/swaps/ISwap.js +90 -33
- package/dist/swaps/ISwapWithGasDrop.d.ts +6 -0
- package/dist/swaps/ISwapWithGasDrop.js +1 -0
- package/dist/swaps/ISwapWrapper.d.ts +157 -48
- package/dist/swaps/ISwapWrapper.js +130 -72
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +49 -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 +94 -29
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +90 -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 +275 -58
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +516 -239
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +76 -25
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +131 -49
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +311 -51
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +542 -193
- 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 +209 -53
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +449 -242
- 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 +197 -56
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +326 -189
- 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 +60 -19
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +74 -31
- 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 +36 -13
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +65 -19
- 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 +328 -92
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +460 -219
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +76 -24
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +244 -124
- package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +146 -18
- package/dist/swaps/trusted/ln/LnForGasSwap.js +173 -43
- 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 +200 -47
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +230 -78
- 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 +7 -1
- package/dist/types/SwapExecutionAction.d.ts +74 -4
- package/dist/types/SwapWithSigner.d.ts +4 -1
- 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 +2 -1
- package/dist/types/fees/FeeBreakdown.d.ts +2 -1
- package/dist/types/fees/PercentagePPM.d.ts +2 -0
- package/dist/types/fees/PercentagePPM.js +1 -0
- package/dist/types/lnurl/LNURLPay.d.ts +14 -6
- package/dist/types/lnurl/LNURLPay.js +6 -2
- package/dist/types/lnurl/LNURLWithdraw.d.ts +12 -5
- package/dist/types/lnurl/LNURLWithdraw.js +6 -2
- package/dist/types/wallets/LightningInvoiceCreateService.d.ts +20 -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 +3 -1
- package/dist/utils/BitcoinUtils.d.ts +1 -0
- package/dist/utils/BitcoinUtils.js +5 -1
- package/dist/utils/SwapUtils.d.ts +56 -1
- package/dist/utils/SwapUtils.js +53 -1
- package/dist/utils/TokenUtils.d.ts +10 -2
- package/dist/utils/TokenUtils.js +12 -4
- package/package.json +3 -3
- 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 +7 -0
- 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 +6 -5
- package/src/intermediaries/Intermediary.ts +57 -10
- package/src/intermediaries/IntermediaryDiscovery.ts +60 -27
- package/src/prices/RedundantSwapPrice.ts +24 -4
- package/src/prices/SingleSwapPrice.ts +10 -7
- package/src/prices/SwapPriceWithChain.ts +59 -21
- package/src/prices/abstract/ISwapPrice.ts +114 -65
- package/src/prices/providers/BinancePriceProvider.ts +7 -0
- package/src/prices/providers/CoinGeckoPriceProvider.ts +6 -0
- package/src/prices/providers/CoinPaprikaPriceProvider.ts +6 -0
- package/src/prices/providers/CustomPriceProvider.ts +11 -0
- package/src/prices/providers/KrakenPriceProvider.ts +9 -0
- package/src/prices/providers/OKXPriceProvider.ts +6 -0
- 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 +513 -379
- package/src/swapper/SwapperFactory.ts +44 -21
- 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 +11 -1
- package/src/swaps/IBTCWalletSwap.ts +24 -8
- package/src/swaps/IClaimableSwap.ts +39 -4
- package/src/swaps/IClaimableSwapWrapper.ts +11 -2
- package/src/swaps/IRefundableSwap.ts +32 -3
- package/src/swaps/ISwap.ts +221 -82
- package/src/swaps/ISwapWithGasDrop.ts +6 -0
- package/src/swaps/ISwapWrapper.ts +212 -94
- package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +62 -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 +120 -51
- package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +24 -11
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +559 -256
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +155 -61
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +590 -226
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +177 -74
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +470 -243
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +141 -59
- package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +352 -193
- package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +48 -23
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +86 -39
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +110 -110
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +88 -33
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +101 -31
- package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +534 -263
- package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +289 -148
- package/src/swaps/trusted/ln/LnForGasSwap.ts +184 -45
- package/src/swaps/trusted/ln/LnForGasWrapper.ts +34 -15
- package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +260 -86
- package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +41 -19
- package/src/types/AmountData.ts +2 -1
- package/src/types/CustomPriceFunction.ts +7 -1
- package/src/types/SwapExecutionAction.ts +84 -5
- package/src/types/SwapWithSigner.ts +7 -3
- package/src/types/Token.ts +12 -5
- package/src/types/TokenAmount.ts +3 -0
- package/src/types/fees/Fee.ts +2 -1
- package/src/types/fees/FeeBreakdown.ts +2 -1
- package/src/types/fees/PercentagePPM.ts +2 -0
- package/src/types/lnurl/LNURLPay.ts +14 -6
- package/src/types/lnurl/LNURLWithdraw.ts +12 -5
- package/src/types/wallets/LightningInvoiceCreateService.ts +26 -0
- package/src/types/wallets/MinimalBitcoinWalletInterface.ts +3 -1
- package/src/types/wallets/MinimalLightningNetworkWalletInterface.ts +3 -1
- package/src/utils/BitcoinUtils.ts +5 -0
- package/src/utils/SwapUtils.ts +61 -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
|
@@ -6,6 +6,7 @@ import {PriceInfoType} from "../types/PriceInfoType";
|
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Chain-specific wrapper for swap pricing
|
|
9
|
+
*
|
|
9
10
|
* @category Pricing and LPs
|
|
10
11
|
*/
|
|
11
12
|
export class SwapPriceWithChain<T extends MultiChain, ChainIdentifier extends ChainIds<T>> {
|
|
@@ -27,21 +28,21 @@ export class SwapPriceWithChain<T extends MultiChain, ChainIdentifier extends Ch
|
|
|
27
28
|
* @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
|
|
28
29
|
* @param feePPM PPM fee rate as reported by the intermediary
|
|
29
30
|
* @param paidToken Amount of token to be paid to the swap
|
|
30
|
-
* @param
|
|
31
|
+
* @param tokenAddress Token address to be paid
|
|
31
32
|
* @param abortSignal
|
|
32
|
-
* @param preFetchedPrice
|
|
33
|
+
* @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
|
|
33
34
|
*/
|
|
34
35
|
public async isValidAmountSend(
|
|
35
36
|
amountSats: bigint,
|
|
36
37
|
satsBaseFee: bigint,
|
|
37
38
|
feePPM: bigint,
|
|
38
39
|
paidToken: bigint,
|
|
39
|
-
|
|
40
|
+
tokenAddress: string,
|
|
40
41
|
abortSignal?: AbortSignal,
|
|
41
42
|
preFetchedPrice?: bigint
|
|
42
43
|
): Promise<PriceInfoType> {
|
|
43
44
|
return this.swapPrice.isValidAmountSend<ChainIdentifier>(
|
|
44
|
-
this.chainIdentifier, amountSats, satsBaseFee, feePPM, paidToken,
|
|
45
|
+
this.chainIdentifier, amountSats, satsBaseFee, feePPM, paidToken, tokenAddress, abortSignal, preFetchedPrice
|
|
45
46
|
);
|
|
46
47
|
}
|
|
47
48
|
|
|
@@ -52,39 +53,53 @@ export class SwapPriceWithChain<T extends MultiChain, ChainIdentifier extends Ch
|
|
|
52
53
|
* @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
|
|
53
54
|
* @param feePPM PPM fee rate as reported by the intermediary
|
|
54
55
|
* @param receiveToken Amount of token to be received from the swap
|
|
55
|
-
* @param
|
|
56
|
+
* @param tokenAddress Token address to be received
|
|
56
57
|
* @param abortSignal
|
|
57
|
-
* @param preFetchedPrice
|
|
58
|
+
* @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
|
|
58
59
|
*/
|
|
59
60
|
public async isValidAmountReceive(
|
|
60
61
|
amountSats: bigint,
|
|
61
62
|
satsBaseFee: bigint,
|
|
62
63
|
feePPM: bigint,
|
|
63
64
|
receiveToken: bigint,
|
|
64
|
-
|
|
65
|
+
tokenAddress: string,
|
|
65
66
|
abortSignal?: AbortSignal,
|
|
66
67
|
preFetchedPrice?: bigint
|
|
67
68
|
): Promise<PriceInfoType> {
|
|
68
69
|
return this.swapPrice.isValidAmountReceive<ChainIdentifier>(
|
|
69
|
-
this.chainIdentifier, amountSats, satsBaseFee, feePPM, receiveToken,
|
|
70
|
+
this.chainIdentifier, amountSats, satsBaseFee, feePPM, receiveToken, tokenAddress, abortSignal, preFetchedPrice
|
|
70
71
|
);
|
|
71
72
|
}
|
|
72
73
|
|
|
74
|
+
/**
|
|
75
|
+
* Pre-fetches the pricing data for a given token, such that further calls to {@link isValidAmountReceive} or
|
|
76
|
+
* {@link isValidAmountSend} are quicker and don't need to wait for the price fetch
|
|
77
|
+
*
|
|
78
|
+
* @param chainIdentifier Chain identifier of the smart chain
|
|
79
|
+
* @param tokenAddress Token address
|
|
80
|
+
* @param abortSignal
|
|
81
|
+
*/
|
|
73
82
|
public preFetchPrice(token: string, abortSignal?: AbortSignal): Promise<bigint> {
|
|
74
83
|
return this.swapPrice.preFetchPrice<ChainIdentifier>(this.chainIdentifier, token, abortSignal);
|
|
75
84
|
}
|
|
76
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Pre-fetches the Bitcoin USD price data, such that further calls to {@link getBtcUsdValue},
|
|
88
|
+
* {@link getTokenUsdValue} or {@link getUsdValue} are quicker and don't need to wait for the price fetch
|
|
89
|
+
*
|
|
90
|
+
* @param abortSignal
|
|
91
|
+
*/
|
|
77
92
|
public preFetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
78
93
|
return this.swapPrice.preFetchUsdPrice(abortSignal);
|
|
79
94
|
}
|
|
80
95
|
|
|
81
96
|
/**
|
|
82
|
-
* Returns amount of
|
|
97
|
+
* Returns amount of `toToken` that is equivalent to `fromAmount` satoshis
|
|
83
98
|
*
|
|
84
|
-
* @param fromAmount
|
|
85
|
-
* @param toToken
|
|
99
|
+
* @param fromAmount Amount of satoshis
|
|
100
|
+
* @param toToken Token address
|
|
86
101
|
* @param abortSignal
|
|
87
|
-
* @param preFetchedPrice
|
|
102
|
+
* @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
|
|
88
103
|
* @throws {Error} when token is not found
|
|
89
104
|
*/
|
|
90
105
|
public async getFromBtcSwapAmount(
|
|
@@ -99,12 +114,12 @@ export class SwapPriceWithChain<T extends MultiChain, ChainIdentifier extends Ch
|
|
|
99
114
|
}
|
|
100
115
|
|
|
101
116
|
/**
|
|
102
|
-
* Returns amount of satoshis that are equivalent to
|
|
117
|
+
* Returns amount of satoshis that are equivalent to `fromAmount` of `fromToken`
|
|
103
118
|
*
|
|
104
119
|
* @param fromAmount Amount of the token
|
|
105
|
-
* @param fromToken Token
|
|
120
|
+
* @param fromToken Token address
|
|
106
121
|
* @param abortSignal
|
|
107
|
-
* @param preFetchedPrice
|
|
122
|
+
* @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
|
|
108
123
|
* @throws {Error} when token is not found
|
|
109
124
|
*/
|
|
110
125
|
public async getToBtcSwapAmount(
|
|
@@ -121,30 +136,53 @@ export class SwapPriceWithChain<T extends MultiChain, ChainIdentifier extends Ch
|
|
|
121
136
|
/**
|
|
122
137
|
* Returns whether the token should be ignored and pricing for it not calculated
|
|
123
138
|
*
|
|
124
|
-
* @param tokenAddress
|
|
139
|
+
* @param tokenAddress Token address
|
|
125
140
|
* @throws {Error} if token is not found
|
|
126
141
|
*/
|
|
127
142
|
public shouldIgnore(tokenAddress: string): boolean {
|
|
128
143
|
return this.swapPrice.shouldIgnore<ChainIdentifier>(this.chainIdentifier, tokenAddress);
|
|
129
144
|
}
|
|
130
145
|
|
|
146
|
+
/**
|
|
147
|
+
* Returns the USD value of the bitcoin amount
|
|
148
|
+
*
|
|
149
|
+
* @param btcSats Bitcoin amount in satoshis
|
|
150
|
+
* @param abortSignal
|
|
151
|
+
* @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
|
|
152
|
+
*/
|
|
131
153
|
public async getBtcUsdValue(
|
|
132
154
|
btcSats: bigint,
|
|
133
155
|
abortSignal?: AbortSignal,
|
|
134
|
-
|
|
156
|
+
preFetchedUsdPrice?: number
|
|
135
157
|
): Promise<number> {
|
|
136
|
-
return this.swapPrice.getBtcUsdValue(btcSats, abortSignal,
|
|
158
|
+
return this.swapPrice.getBtcUsdValue(btcSats, abortSignal, preFetchedUsdPrice);
|
|
137
159
|
}
|
|
138
160
|
|
|
161
|
+
/**
|
|
162
|
+
* Returns the USD value of the smart chain token amount
|
|
163
|
+
*
|
|
164
|
+
* @param tokenAmount Amount of the token in base units
|
|
165
|
+
* @param tokenAddress Token address
|
|
166
|
+
* @param abortSignal
|
|
167
|
+
* @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
|
|
168
|
+
*/
|
|
139
169
|
public async getTokenUsdValue(
|
|
140
170
|
tokenAmount: bigint,
|
|
141
|
-
|
|
171
|
+
tokenAddress: string,
|
|
142
172
|
abortSignal?: AbortSignal,
|
|
143
|
-
|
|
173
|
+
preFetchedUsdPrice?: number
|
|
144
174
|
): Promise<number> {
|
|
145
|
-
return this.swapPrice.getTokenUsdValue(this.chainIdentifier, tokenAmount,
|
|
175
|
+
return this.swapPrice.getTokenUsdValue(this.chainIdentifier, tokenAmount, tokenAddress, abortSignal, preFetchedUsdPrice);
|
|
146
176
|
}
|
|
147
177
|
|
|
178
|
+
/**
|
|
179
|
+
* Returns the USD value of the token amount
|
|
180
|
+
*
|
|
181
|
+
* @param amount Amount in base units of the token
|
|
182
|
+
* @param token Token to fetch the usd price for
|
|
183
|
+
* @param abortSignal
|
|
184
|
+
* @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
|
|
185
|
+
*/
|
|
148
186
|
public getUsdValue(
|
|
149
187
|
amount: bigint,
|
|
150
188
|
token: Token<ChainIdentifier>,
|
|
@@ -4,6 +4,7 @@ import {PriceInfoType} from "../../types/PriceInfoType";
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Abstract base class for swap pricing implementations
|
|
7
|
+
*
|
|
7
8
|
* @category Pricing and LPs
|
|
8
9
|
*/
|
|
9
10
|
export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
|
|
@@ -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,6 +10,7 @@ export type BinanceResponse = {
|
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Price provider using Binance exchange API
|
|
13
|
+
*
|
|
13
14
|
* @category Pricing and LPs
|
|
14
15
|
*/
|
|
15
16
|
export class BinancePriceProvider<T extends MultiChain> extends ExchangePriceProvider<T> {
|
|
@@ -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",
|
|
@@ -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",
|
|
@@ -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 and LPs
|
|
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;
|