fee calculation

This commit is contained in:
Kirill Litvinov
2023-08-01 16:19:52 +03:00
parent b32957f528
commit 7eebb2bb9e
7 changed files with 34 additions and 20 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "@orionprotocol/sdk",
"version": "0.19.42-rc2",
"version": "0.19.42-rc3",
"description": "Orion Protocol SDK",
"main": "./lib/index.cjs",
"module": "./lib/index.js",

View File

@@ -140,6 +140,8 @@ export default async function getSwapInfo({
baseCurrencyPriceInQuoteAsset,
gasPriceGwei,
feePercent,
feeAssetAddress,
allPrices.prices,
);
return {

View File

@@ -388,6 +388,8 @@ export default async function swapLimit({
baseCurrencyPriceInQuoteAsset,
gasPriceGwei,
feePercent,
feeAsset,
allPrices.prices,
);
if (feeAsset === assetOut) {

View File

@@ -346,6 +346,8 @@ export default async function swapMarket({
baseCurrencyPriceInQuoteAsset,
gasPriceGwei,
feePercent,
feeAsset,
allPrices.prices,
);
if (feeAsset === assetOut) {

View File

@@ -5,23 +5,32 @@ import calculateServiceFeeInFeeAsset from './calculateServiceFeeInFeeAsset.js';
const calculateFeeInFeeAsset = (
amount: BigNumber.Value,
feeAssetPriceInServiceToken: BigNumber.Value,
baseAssetPriceInServiceToken: BigNumber.Value,
baseCurrencyPriceInServiceToken: BigNumber.Value,
feeAssetPrice: BigNumber.Value,
baseAssetPrice: BigNumber.Value,
baseCurrencyPrice: BigNumber.Value,
gasPriceGwei: BigNumber.Value,
feePercent: BigNumber.Value,
feeAsset: string,
assetPrices: Partial<Record<string, string>>,
) => {
const feeAssetPriceInQuoteAsset = assetPrices[feeAsset];
if (feeAssetPriceInQuoteAsset === undefined) throw Error('feeAssetPriceInQuoteAsset is undefined');
const feeAssetPriceInQuoteAssetBN = new BigNumber(feeAssetPriceInQuoteAsset);
const serviceFeeInFeeAsset = calculateServiceFeeInFeeAsset(
amount,
feeAssetPriceInServiceToken,
baseAssetPriceInServiceToken,
feeAssetPrice,
baseAssetPrice,
feePercent,
feeAssetPriceInQuoteAssetBN
);
const networkFeeInFeeAsset = calculateNetworkFeeInFeeAsset(
gasPriceGwei,
FILL_ORDERS_GAS_LIMIT,
baseCurrencyPriceInServiceToken,
feeAssetPriceInServiceToken,
baseCurrencyPrice,
feeAssetPrice,
feeAssetPriceInQuoteAssetBN
);
return {

View File

@@ -4,17 +4,15 @@ import calculateNetworkFee from './calculateNetworkFee.js';
const calculateNetworkFeeInFeeAsset = (
gasPriceGwei: BigNumber.Value,
gasLimit: BigNumber.Value,
baseCurrencyPriceInServiceToken: BigNumber.Value,
feeAssetPriceInServiceToken: BigNumber.Value,
baseCurrencyPrice: BigNumber.Value,
feeAssetPrice: BigNumber.Value,
feeAssetPriceInQuoteAsset: BigNumber.Value,
) => {
const networkFee = calculateNetworkFee(gasPriceGwei, gasLimit);
const networkFeeInServiceToken = new BigNumber(networkFee).multipliedBy(baseCurrencyPriceInServiceToken);
const networkFeeInFeeAsset = networkFeeInServiceToken
.multipliedBy(
new BigNumber(1)
.div(feeAssetPriceInServiceToken),
);
const networkFeeInQuoteAsset = new BigNumber(networkFee).multipliedBy(baseCurrencyPrice);
const networkFeeInFeeAsset = networkFeeInQuoteAsset
.div(new BigNumber(feeAssetPriceInQuoteAsset).multipliedBy(feeAssetPrice));
return networkFeeInFeeAsset.toString();
};

View File

@@ -2,14 +2,15 @@ import { BigNumber } from 'bignumber.js';
export default function calculateServiceFeeInFeeAsset(
amount: BigNumber.Value,
feeAssetPriceInServiceToken: BigNumber.Value,
baseAssetPriceInServiceToken: BigNumber.Value,
feeAssetPrice: BigNumber.Value,
baseAssetPrice: BigNumber.Value,
feePercent: BigNumber.Value,
feeAssetPriceInQuoteAsset: BigNumber.Value,
) {
const result = new BigNumber(amount)
.multipliedBy(new BigNumber(feePercent).div(100))
.multipliedBy(baseAssetPriceInServiceToken)
.multipliedBy(new BigNumber(1).div(feeAssetPriceInServiceToken))
.multipliedBy(baseAssetPrice)
.div(new BigNumber(feeAssetPriceInQuoteAsset).multipliedBy(feeAssetPrice))
.toString();
return result;