mirror of
https://github.com/orionprotocol/sdk.git
synced 2026-03-28 16:48:00 +03:00
merged with develop
This commit is contained in:
@@ -5,23 +5,33 @@ import calculateServiceFeeInFeeAsset from './calculateServiceFeeInFeeAsset.js';
|
||||
|
||||
const calculateFeeInFeeAsset = (
|
||||
amount: BigNumber.Value,
|
||||
feeAssetPriceInServiceToken: BigNumber.Value,
|
||||
baseAssetPriceInServiceToken: BigNumber.Value,
|
||||
baseCurrencyPriceInServiceToken: BigNumber.Value,
|
||||
gasPriceGwei: BigNumber.Value,
|
||||
feePercent: BigNumber.Value,
|
||||
baseAssetName: string,
|
||||
baseCurrencyName: string,
|
||||
feeAssetName: string,
|
||||
prices: Partial<Record<string, string>>,
|
||||
) => {
|
||||
const feeAssetPrice = prices[feeAssetName];
|
||||
if (feeAssetPrice === undefined) throw Error(`Fee asset price not found. Available prices: ${Object.keys(prices).join(', ')}`);
|
||||
const baseAssetPrice = prices[baseAssetName];
|
||||
if (baseAssetPrice === undefined) throw Error(`Base asset price not found. Available prices: ${Object.keys(prices).join(', ')}`);
|
||||
const baseCurrencyPrice = prices[baseCurrencyName]; // ETH, BNB, MATIC, etc.
|
||||
if (baseCurrencyPrice === undefined) throw Error(`Base currency price not found. Available prices: ${Object.keys(prices).join(', ')}`);
|
||||
|
||||
const serviceFeeInFeeAsset = calculateServiceFeeInFeeAsset(
|
||||
amount,
|
||||
feeAssetPriceInServiceToken,
|
||||
baseAssetPriceInServiceToken,
|
||||
baseAssetName,
|
||||
feeAssetName,
|
||||
feePercent,
|
||||
prices,
|
||||
);
|
||||
const networkFeeInFeeAsset = calculateNetworkFeeInFeeAsset(
|
||||
gasPriceGwei,
|
||||
FILL_ORDERS_GAS_LIMIT,
|
||||
baseCurrencyPriceInServiceToken,
|
||||
feeAssetPriceInServiceToken,
|
||||
baseCurrencyName,
|
||||
feeAssetName,
|
||||
prices,
|
||||
);
|
||||
|
||||
return {
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
import { BigNumber } from 'bignumber.js';
|
||||
import type { BigNumber } from 'bignumber.js';
|
||||
import calculateNetworkFee from './calculateNetworkFee.js';
|
||||
import convertPrice from './convertPrice.js';
|
||||
|
||||
const calculateNetworkFeeInFeeAsset = (
|
||||
gasPriceGwei: BigNumber.Value,
|
||||
gasLimit: BigNumber.Value,
|
||||
baseCurrencyPriceInServiceToken: BigNumber.Value,
|
||||
feeAssetPriceInServiceToken: BigNumber.Value,
|
||||
baseCurrencyName: string,
|
||||
feeAssetName: string,
|
||||
prices: Partial<Record<string, string>>
|
||||
) => {
|
||||
const networkFee = calculateNetworkFee(gasPriceGwei, gasLimit);
|
||||
|
||||
const networkFeeInServiceToken = new BigNumber(networkFee).multipliedBy(baseCurrencyPriceInServiceToken);
|
||||
const networkFeeInFeeAsset = networkFeeInServiceToken
|
||||
.multipliedBy(
|
||||
new BigNumber(1)
|
||||
.div(feeAssetPriceInServiceToken),
|
||||
);
|
||||
|
||||
return networkFeeInFeeAsset.toString();
|
||||
return convertPrice(
|
||||
networkFee,
|
||||
baseCurrencyName, // from
|
||||
feeAssetName, // to
|
||||
prices
|
||||
);
|
||||
};
|
||||
|
||||
export default calculateNetworkFeeInFeeAsset;
|
||||
|
||||
@@ -1,16 +1,21 @@
|
||||
import { BigNumber } from 'bignumber.js';
|
||||
import convertPrice from './convertPrice.js';
|
||||
|
||||
export default function calculateServiceFeeInFeeAsset(
|
||||
amount: BigNumber.Value,
|
||||
feeAssetPriceInServiceToken: BigNumber.Value,
|
||||
baseAssetPriceInServiceToken: BigNumber.Value,
|
||||
baseAssetName: string,
|
||||
feeAssetName: string,
|
||||
feePercent: BigNumber.Value,
|
||||
prices: Partial<Record<string, string>>
|
||||
) {
|
||||
const result = new BigNumber(amount)
|
||||
.multipliedBy(new BigNumber(feePercent).div(100))
|
||||
.multipliedBy(baseAssetPriceInServiceToken)
|
||||
.multipliedBy(new BigNumber(1).div(feeAssetPriceInServiceToken))
|
||||
.toString();
|
||||
const feeAmount = new BigNumber(amount).multipliedBy(new BigNumber(feePercent).div(100));
|
||||
|
||||
return result;
|
||||
const feeAssetAmount = convertPrice(
|
||||
feeAmount,
|
||||
baseAssetName,
|
||||
feeAssetName,
|
||||
prices
|
||||
);
|
||||
|
||||
return feeAssetAmount;
|
||||
}
|
||||
|
||||
26
src/utils/convertPrice.ts
Normal file
26
src/utils/convertPrice.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
import { BigNumber } from 'bignumber.js';
|
||||
|
||||
export default function convertPrice(
|
||||
amount: BigNumber.Value,
|
||||
assetInName: string,
|
||||
assetOutName: string,
|
||||
prices: Partial<Record<string, string>> // quoted in quoteAsset. [name]: priceQuotedInQuoteAsset
|
||||
) {
|
||||
const assetInPrice = prices[assetInName];
|
||||
if (assetInPrice === undefined) throw Error(`Price conversion: AssetIn (${assetInName}) price is undefined. Available prices: ${JSON.stringify(prices)}`);
|
||||
|
||||
const assetOutPrice = prices[assetOutName];
|
||||
if (assetOutPrice === undefined) throw Error(`Price conversion: AssetOut (${assetOutName}) price is undefined. Available prices: ${JSON.stringify(prices)}`);
|
||||
|
||||
const assetInPriceBN = new BigNumber(assetInPrice);
|
||||
const assetOutPriceBN = new BigNumber(assetOutPrice);
|
||||
|
||||
const assetInAmountBN = new BigNumber(amount);
|
||||
|
||||
const assetInAmountInQuoteAsset = assetInAmountBN.multipliedBy(assetInPriceBN);
|
||||
const assetInAmountInQuoteAssetBN = new BigNumber(assetInAmountInQuoteAsset);
|
||||
|
||||
const assetOutAmountInQuoteAsset = assetInAmountInQuoteAssetBN.dividedBy(assetOutPriceBN);
|
||||
|
||||
return assetOutAmountInQuoteAsset;
|
||||
}
|
||||
@@ -16,6 +16,7 @@ export { default as getNativeCryptocurrencyName } from './getNativeCryptocurrenc
|
||||
export { default as laconicParse } from './laconic-parse.js';
|
||||
export { default as isValidChainId } from './isValidChainId.js';
|
||||
export { default as isKnownEnv } from './isKnownEnv.js';
|
||||
export { default as removeFieldsFromObject } from './removeFieldsFromObject.js';
|
||||
// export { default as HttpError } from './httpError';
|
||||
|
||||
export * from './typeHelpers.js';
|
||||
|
||||
16
src/utils/removeFieldsFromObject.ts
Normal file
16
src/utils/removeFieldsFromObject.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
const removeFieldsFromObject = <
|
||||
T extends Record<string, unknown>,
|
||||
K extends keyof T
|
||||
>(
|
||||
obj: T,
|
||||
fields: K[]
|
||||
): Omit<T, K> => {
|
||||
const result = { ...obj };
|
||||
for (const field of fields) {
|
||||
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
||||
delete result[field];
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
export default removeFieldsFromObject;
|
||||
Reference in New Issue
Block a user