@drift-labs/sdk 2.82.0-beta.3 → 2.82.0-beta.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/VERSION +1 -1
- package/lib/driftClient.d.ts +10 -0
- package/lib/driftClient.js +35 -0
- package/lib/priorityFee/driftPriorityFeeMethod.d.ts +11 -1
- package/lib/priorityFee/heliusPriorityFeeMethod.d.ts +0 -6
- package/lib/priorityFee/index.d.ts +2 -0
- package/lib/priorityFee/index.js +2 -0
- package/lib/priorityFee/priorityFeeSubscriber.d.ts +2 -1
- package/lib/priorityFee/priorityFeeSubscriberMap.d.ts +2 -2
- package/lib/priorityFee/types.d.ts +1 -5
- package/lib/user.d.ts +0 -10
- package/lib/user.js +1 -27
- package/package.json +1 -1
- package/src/driftClient.ts +42 -0
- package/src/priorityFee/driftPriorityFeeMethod.ts +13 -1
- package/src/priorityFee/heliusPriorityFeeMethod.ts +0 -7
- package/src/priorityFee/index.ts +2 -0
- package/src/priorityFee/priorityFeeSubscriber.ts +4 -2
- package/src/priorityFee/priorityFeeSubscriberMap.ts +2 -2
- package/src/priorityFee/types.ts +4 -6
- package/src/user.ts +3 -31
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.82.0-beta.
|
|
1
|
+
2.82.0-beta.5
|
package/lib/driftClient.d.ts
CHANGED
|
@@ -657,6 +657,16 @@ export declare class DriftClient {
|
|
|
657
657
|
getDepositIntoSpotMarketRevenuePoolIx(marketIndex: number, amount: BN, userTokenAccountPublicKey: PublicKey): Promise<TransactionInstruction>;
|
|
658
658
|
depositIntoSpotMarketRevenuePool(marketIndex: number, amount: BN, userTokenAccountPublicKey: PublicKey): Promise<TransactionSignature>;
|
|
659
659
|
getPerpMarketExtendedInfo(marketIndex: number): PerpMarketExtendedInfo;
|
|
660
|
+
/**
|
|
661
|
+
* Calculates taker / maker fee (as a percentage, e.g. .001 = 10 basis points) for particular marketType
|
|
662
|
+
* @param marketType
|
|
663
|
+
* @param positionMarketIndex
|
|
664
|
+
* @returns : {takerFee: number, makerFee: number} Precision None
|
|
665
|
+
*/
|
|
666
|
+
getMarketFees(marketType: MarketType, marketIndex?: number, user?: User): {
|
|
667
|
+
takerFee: number;
|
|
668
|
+
makerFee: number;
|
|
669
|
+
};
|
|
660
670
|
/**
|
|
661
671
|
* Returns the market index and type for a given market name
|
|
662
672
|
* E.g. "SOL-PERP" -> { marketIndex: 0, marketType: MarketType.PERP }
|
package/lib/driftClient.js
CHANGED
|
@@ -3548,6 +3548,41 @@ class DriftClient {
|
|
|
3548
3548
|
};
|
|
3549
3549
|
return extendedInfo;
|
|
3550
3550
|
}
|
|
3551
|
+
/**
|
|
3552
|
+
* Calculates taker / maker fee (as a percentage, e.g. .001 = 10 basis points) for particular marketType
|
|
3553
|
+
* @param marketType
|
|
3554
|
+
* @param positionMarketIndex
|
|
3555
|
+
* @returns : {takerFee: number, makerFee: number} Precision None
|
|
3556
|
+
*/
|
|
3557
|
+
getMarketFees(marketType, marketIndex, user) {
|
|
3558
|
+
let feeTier;
|
|
3559
|
+
if (user) {
|
|
3560
|
+
feeTier = user.getUserFeeTier(marketType);
|
|
3561
|
+
}
|
|
3562
|
+
else {
|
|
3563
|
+
const state = this.getStateAccount();
|
|
3564
|
+
feeTier = (0, types_1.isVariant)(marketType, 'perp')
|
|
3565
|
+
? state.perpFeeStructure.feeTiers[0]
|
|
3566
|
+
: state.spotFeeStructure.feeTiers[0];
|
|
3567
|
+
}
|
|
3568
|
+
let takerFee = feeTier.feeNumerator / feeTier.feeDenominator;
|
|
3569
|
+
let makerFee = feeTier.makerRebateNumerator / feeTier.makerRebateDenominator;
|
|
3570
|
+
if (marketIndex !== undefined) {
|
|
3571
|
+
let marketAccount = null;
|
|
3572
|
+
if ((0, types_1.isVariant)(marketType, 'perp')) {
|
|
3573
|
+
marketAccount = this.getPerpMarketAccount(marketIndex);
|
|
3574
|
+
}
|
|
3575
|
+
else {
|
|
3576
|
+
marketAccount = this.getSpotMarketAccount(marketIndex);
|
|
3577
|
+
}
|
|
3578
|
+
takerFee += (takerFee * marketAccount.feeAdjustment) / 100;
|
|
3579
|
+
makerFee += (makerFee * marketAccount.feeAdjustment) / 100;
|
|
3580
|
+
}
|
|
3581
|
+
return {
|
|
3582
|
+
takerFee,
|
|
3583
|
+
makerFee,
|
|
3584
|
+
};
|
|
3585
|
+
}
|
|
3551
3586
|
/**
|
|
3552
3587
|
* Returns the market index and type for a given market name
|
|
3553
3588
|
* E.g. "SOL-PERP" -> { marketIndex: 0, marketType: MarketType.PERP }
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { HeliusPriorityLevel } from './heliusPriorityFeeMethod';
|
|
2
|
+
export type DriftMarketInfo = {
|
|
3
|
+
marketType: string;
|
|
4
|
+
marketIndex: number;
|
|
5
|
+
};
|
|
6
|
+
export type DriftPriorityFeeLevels = {
|
|
7
|
+
[key in HeliusPriorityLevel]: number;
|
|
8
|
+
} & {
|
|
9
|
+
marketType: 'perp' | 'spot';
|
|
10
|
+
marketIndex: number;
|
|
11
|
+
};
|
|
2
12
|
export type DriftPriorityFeeResponse = DriftPriorityFeeLevels[];
|
|
3
13
|
export declare function fetchDriftPriorityFee(url: string, marketTypes: string[], marketIndexes: number[]): Promise<DriftPriorityFeeResponse>;
|
|
@@ -9,12 +9,6 @@ export declare enum HeliusPriorityLevel {
|
|
|
9
9
|
export type HeliusPriorityFeeLevels = {
|
|
10
10
|
[key in HeliusPriorityLevel]: number;
|
|
11
11
|
};
|
|
12
|
-
export type DriftPriorityFeeLevels = {
|
|
13
|
-
[key in HeliusPriorityLevel]: number;
|
|
14
|
-
} & {
|
|
15
|
-
marketType: 'perp' | 'spot';
|
|
16
|
-
marketIndex: number;
|
|
17
|
-
};
|
|
18
12
|
export type HeliusPriorityFeeResponse = {
|
|
19
13
|
jsonrpc: string;
|
|
20
14
|
result: {
|
|
@@ -4,6 +4,8 @@ export * from './ewmaStrategy';
|
|
|
4
4
|
export * from './maxOverSlotsStrategy';
|
|
5
5
|
export * from './maxStrategy';
|
|
6
6
|
export * from './priorityFeeSubscriber';
|
|
7
|
+
export * from './priorityFeeSubscriberMap';
|
|
7
8
|
export * from './solanaPriorityFeeMethod';
|
|
8
9
|
export * from './heliusPriorityFeeMethod';
|
|
10
|
+
export * from './driftPriorityFeeMethod';
|
|
9
11
|
export * from './types';
|
package/lib/priorityFee/index.js
CHANGED
|
@@ -20,6 +20,8 @@ __exportStar(require("./ewmaStrategy"), exports);
|
|
|
20
20
|
__exportStar(require("./maxOverSlotsStrategy"), exports);
|
|
21
21
|
__exportStar(require("./maxStrategy"), exports);
|
|
22
22
|
__exportStar(require("./priorityFeeSubscriber"), exports);
|
|
23
|
+
__exportStar(require("./priorityFeeSubscriberMap"), exports);
|
|
23
24
|
__exportStar(require("./solanaPriorityFeeMethod"), exports);
|
|
24
25
|
__exportStar(require("./heliusPriorityFeeMethod"), exports);
|
|
26
|
+
__exportStar(require("./driftPriorityFeeMethod"), exports);
|
|
25
27
|
__exportStar(require("./types"), exports);
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Connection, PublicKey } from '@solana/web3.js';
|
|
2
|
-
import {
|
|
2
|
+
import { PriorityFeeMethod, PriorityFeeStrategy, PriorityFeeSubscriberConfig } from './types';
|
|
3
3
|
import { AverageOverSlotsStrategy } from './averageOverSlotsStrategy';
|
|
4
4
|
import { MaxOverSlotsStrategy } from './maxOverSlotsStrategy';
|
|
5
5
|
import { HeliusPriorityFeeLevels, HeliusPriorityLevel } from './heliusPriorityFeeMethod';
|
|
6
|
+
import { DriftMarketInfo } from './driftPriorityFeeMethod';
|
|
6
7
|
export declare class PriorityFeeSubscriber {
|
|
7
8
|
connection: Connection;
|
|
8
9
|
frequencyMs: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DriftPriorityFeeLevels } from './
|
|
2
|
-
import {
|
|
1
|
+
import { DriftMarketInfo, DriftPriorityFeeLevels } from './driftPriorityFeeMethod';
|
|
2
|
+
import { PriorityFeeSubscriberMapConfig } from './types';
|
|
3
3
|
/**
|
|
4
4
|
* takes advantage of /batchPriorityFees endpoint from drift hosted priority fee service
|
|
5
5
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Connection, PublicKey } from '@solana/web3.js';
|
|
2
2
|
import { SolanaPriorityFeeResponse } from './solanaPriorityFeeMethod';
|
|
3
3
|
import { HeliusPriorityFeeResponse } from './heliusPriorityFeeMethod';
|
|
4
|
-
import { DriftPriorityFeeResponse } from './driftPriorityFeeMethod';
|
|
4
|
+
import { DriftMarketInfo, DriftPriorityFeeResponse } from './driftPriorityFeeMethod';
|
|
5
5
|
export declare const DEFAULT_PRIORITY_FEE_MAP_FREQUENCY_MS = 10000;
|
|
6
6
|
export interface PriorityFeeStrategy {
|
|
7
7
|
calculate(samples: SolanaPriorityFeeResponse[] | HeliusPriorityFeeResponse | DriftPriorityFeeResponse): number;
|
|
@@ -11,10 +11,6 @@ export declare enum PriorityFeeMethod {
|
|
|
11
11
|
HELIUS = "helius",
|
|
12
12
|
DRIFT = "drift"
|
|
13
13
|
}
|
|
14
|
-
export type DriftMarketInfo = {
|
|
15
|
-
marketType: string;
|
|
16
|
-
marketIndex: number;
|
|
17
|
-
};
|
|
18
14
|
export type PriorityFeeSubscriberConfig = {
|
|
19
15
|
connection?: Connection;
|
|
20
16
|
frequencyMs?: number;
|
package/lib/user.d.ts
CHANGED
|
@@ -346,16 +346,6 @@ export declare class User {
|
|
|
346
346
|
*/
|
|
347
347
|
accountLeverageRatioAfterTrade(targetMarketIndex: number, targetMarketType: MarketType, tradeQuoteAmount: BN, tradeSide: PositionDirection, includeOpenOrders?: boolean): BN;
|
|
348
348
|
getUserFeeTier(marketType: MarketType, now?: BN): import("./types").FeeTier;
|
|
349
|
-
/**
|
|
350
|
-
* Calculates taker / maker fee (as a percentage, e.g. .001 = 10 basis points) for particular marketType
|
|
351
|
-
* @param marketType
|
|
352
|
-
* @param positionMarketIndex
|
|
353
|
-
* @returns : {takerFee: number, makerFee: number} Precision None
|
|
354
|
-
*/
|
|
355
|
-
getMarketFees(marketType: MarketType, marketIndex?: number): {
|
|
356
|
-
takerFee: number;
|
|
357
|
-
makerFee: number;
|
|
358
|
-
};
|
|
359
349
|
/**
|
|
360
350
|
* Calculates how much perp fee will be taken for a given sized trade
|
|
361
351
|
* @param quoteAmount
|
package/lib/user.js
CHANGED
|
@@ -1709,32 +1709,6 @@ class User {
|
|
|
1709
1709
|
}
|
|
1710
1710
|
return state.spotFeeStructure.feeTiers[feeTierIndex];
|
|
1711
1711
|
}
|
|
1712
|
-
/**
|
|
1713
|
-
* Calculates taker / maker fee (as a percentage, e.g. .001 = 10 basis points) for particular marketType
|
|
1714
|
-
* @param marketType
|
|
1715
|
-
* @param positionMarketIndex
|
|
1716
|
-
* @returns : {takerFee: number, makerFee: number} Precision None
|
|
1717
|
-
*/
|
|
1718
|
-
getMarketFees(marketType, marketIndex) {
|
|
1719
|
-
const feeTier = this.getUserFeeTier(marketType);
|
|
1720
|
-
let takerFee = feeTier.feeNumerator / feeTier.feeDenominator;
|
|
1721
|
-
let makerFee = feeTier.makerRebateNumerator / feeTier.makerRebateDenominator;
|
|
1722
|
-
if (marketIndex !== undefined) {
|
|
1723
|
-
let marketAccount = null;
|
|
1724
|
-
if ((0, types_1.isVariant)(marketType, 'perp')) {
|
|
1725
|
-
marketAccount = this.driftClient.getPerpMarketAccount(marketIndex);
|
|
1726
|
-
}
|
|
1727
|
-
else {
|
|
1728
|
-
marketAccount = this.driftClient.getSpotMarketAccount(marketIndex);
|
|
1729
|
-
}
|
|
1730
|
-
takerFee += (takerFee * marketAccount.feeAdjustment) / 100;
|
|
1731
|
-
makerFee += (makerFee * marketAccount.feeAdjustment) / 100;
|
|
1732
|
-
}
|
|
1733
|
-
return {
|
|
1734
|
-
takerFee,
|
|
1735
|
-
makerFee,
|
|
1736
|
-
};
|
|
1737
|
-
}
|
|
1738
1712
|
/**
|
|
1739
1713
|
* Calculates how much perp fee will be taken for a given sized trade
|
|
1740
1714
|
* @param quoteAmount
|
|
@@ -1742,7 +1716,7 @@ class User {
|
|
|
1742
1716
|
*/
|
|
1743
1717
|
calculateFeeForQuoteAmount(quoteAmount, marketIndex) {
|
|
1744
1718
|
if (marketIndex !== undefined) {
|
|
1745
|
-
const takerFeeMultiplier = this.getMarketFees(_1.MarketType.PERP, marketIndex).takerFee;
|
|
1719
|
+
const takerFeeMultiplier = this.driftClient.getMarketFees(_1.MarketType.PERP, marketIndex, this).takerFee;
|
|
1746
1720
|
const feeAmountNum = _1.BigNum.from(quoteAmount, numericConstants_1.QUOTE_PRECISION_EXP).toNum() *
|
|
1747
1721
|
takerFeeMultiplier;
|
|
1748
1722
|
return _1.BigNum.fromPrint(feeAmountNum.toString(), numericConstants_1.QUOTE_PRECISION_EXP).val;
|
package/package.json
CHANGED
package/src/driftClient.ts
CHANGED
|
@@ -6640,6 +6640,48 @@ export class DriftClient {
|
|
|
6640
6640
|
return extendedInfo;
|
|
6641
6641
|
}
|
|
6642
6642
|
|
|
6643
|
+
/**
|
|
6644
|
+
* Calculates taker / maker fee (as a percentage, e.g. .001 = 10 basis points) for particular marketType
|
|
6645
|
+
* @param marketType
|
|
6646
|
+
* @param positionMarketIndex
|
|
6647
|
+
* @returns : {takerFee: number, makerFee: number} Precision None
|
|
6648
|
+
*/
|
|
6649
|
+
public getMarketFees(
|
|
6650
|
+
marketType: MarketType,
|
|
6651
|
+
marketIndex?: number,
|
|
6652
|
+
user?: User
|
|
6653
|
+
) {
|
|
6654
|
+
let feeTier;
|
|
6655
|
+
if (user) {
|
|
6656
|
+
feeTier = user.getUserFeeTier(marketType);
|
|
6657
|
+
} else {
|
|
6658
|
+
const state = this.getStateAccount();
|
|
6659
|
+
feeTier = isVariant(marketType, 'perp')
|
|
6660
|
+
? state.perpFeeStructure.feeTiers[0]
|
|
6661
|
+
: state.spotFeeStructure.feeTiers[0];
|
|
6662
|
+
}
|
|
6663
|
+
|
|
6664
|
+
let takerFee = feeTier.feeNumerator / feeTier.feeDenominator;
|
|
6665
|
+
let makerFee =
|
|
6666
|
+
feeTier.makerRebateNumerator / feeTier.makerRebateDenominator;
|
|
6667
|
+
|
|
6668
|
+
if (marketIndex !== undefined) {
|
|
6669
|
+
let marketAccount = null;
|
|
6670
|
+
if (isVariant(marketType, 'perp')) {
|
|
6671
|
+
marketAccount = this.getPerpMarketAccount(marketIndex);
|
|
6672
|
+
} else {
|
|
6673
|
+
marketAccount = this.getSpotMarketAccount(marketIndex);
|
|
6674
|
+
}
|
|
6675
|
+
takerFee += (takerFee * marketAccount.feeAdjustment) / 100;
|
|
6676
|
+
makerFee += (makerFee * marketAccount.feeAdjustment) / 100;
|
|
6677
|
+
}
|
|
6678
|
+
|
|
6679
|
+
return {
|
|
6680
|
+
takerFee,
|
|
6681
|
+
makerFee,
|
|
6682
|
+
};
|
|
6683
|
+
}
|
|
6684
|
+
|
|
6643
6685
|
/**
|
|
6644
6686
|
* Returns the market index and type for a given market name
|
|
6645
6687
|
* E.g. "SOL-PERP" -> { marketIndex: 0, marketType: MarketType.PERP }
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import fetch from 'node-fetch';
|
|
2
|
-
import {
|
|
2
|
+
import { HeliusPriorityLevel } from './heliusPriorityFeeMethod';
|
|
3
|
+
|
|
4
|
+
export type DriftMarketInfo = {
|
|
5
|
+
marketType: string;
|
|
6
|
+
marketIndex: number;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export type DriftPriorityFeeLevels = {
|
|
10
|
+
[key in HeliusPriorityLevel]: number;
|
|
11
|
+
} & {
|
|
12
|
+
marketType: 'perp' | 'spot';
|
|
13
|
+
marketIndex: number;
|
|
14
|
+
};
|
|
3
15
|
|
|
4
16
|
export type DriftPriorityFeeResponse = DriftPriorityFeeLevels[];
|
|
5
17
|
|
|
@@ -13,13 +13,6 @@ export type HeliusPriorityFeeLevels = {
|
|
|
13
13
|
[key in HeliusPriorityLevel]: number;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
export type DriftPriorityFeeLevels = {
|
|
17
|
-
[key in HeliusPriorityLevel]: number;
|
|
18
|
-
} & {
|
|
19
|
-
marketType: 'perp' | 'spot';
|
|
20
|
-
marketIndex: number;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
16
|
export type HeliusPriorityFeeResponse = {
|
|
24
17
|
jsonrpc: string;
|
|
25
18
|
result: {
|
package/src/priorityFee/index.ts
CHANGED
|
@@ -4,6 +4,8 @@ export * from './ewmaStrategy';
|
|
|
4
4
|
export * from './maxOverSlotsStrategy';
|
|
5
5
|
export * from './maxStrategy';
|
|
6
6
|
export * from './priorityFeeSubscriber';
|
|
7
|
+
export * from './priorityFeeSubscriberMap';
|
|
7
8
|
export * from './solanaPriorityFeeMethod';
|
|
8
9
|
export * from './heliusPriorityFeeMethod';
|
|
10
|
+
export * from './driftPriorityFeeMethod';
|
|
9
11
|
export * from './types';
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Connection, PublicKey } from '@solana/web3.js';
|
|
2
2
|
import {
|
|
3
3
|
DEFAULT_PRIORITY_FEE_MAP_FREQUENCY_MS,
|
|
4
|
-
DriftMarketInfo,
|
|
5
4
|
PriorityFeeMethod,
|
|
6
5
|
PriorityFeeStrategy,
|
|
7
6
|
PriorityFeeSubscriberConfig,
|
|
@@ -14,7 +13,10 @@ import {
|
|
|
14
13
|
HeliusPriorityLevel,
|
|
15
14
|
fetchHeliusPriorityFee,
|
|
16
15
|
} from './heliusPriorityFeeMethod';
|
|
17
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
fetchDriftPriorityFee,
|
|
18
|
+
DriftMarketInfo,
|
|
19
|
+
} from './driftPriorityFeeMethod';
|
|
18
20
|
|
|
19
21
|
export class PriorityFeeSubscriber {
|
|
20
22
|
connection: Connection;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
+
DriftMarketInfo,
|
|
3
|
+
DriftPriorityFeeLevels,
|
|
2
4
|
DriftPriorityFeeResponse,
|
|
3
5
|
fetchDriftPriorityFee,
|
|
4
6
|
} from './driftPriorityFeeMethod';
|
|
5
|
-
import { DriftPriorityFeeLevels } from './heliusPriorityFeeMethod';
|
|
6
7
|
import {
|
|
7
8
|
DEFAULT_PRIORITY_FEE_MAP_FREQUENCY_MS,
|
|
8
|
-
DriftMarketInfo,
|
|
9
9
|
PriorityFeeSubscriberMapConfig,
|
|
10
10
|
} from './types';
|
|
11
11
|
|
package/src/priorityFee/types.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { Connection, PublicKey } from '@solana/web3.js';
|
|
2
2
|
import { SolanaPriorityFeeResponse } from './solanaPriorityFeeMethod';
|
|
3
3
|
import { HeliusPriorityFeeResponse } from './heliusPriorityFeeMethod';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
DriftMarketInfo,
|
|
6
|
+
DriftPriorityFeeResponse,
|
|
7
|
+
} from './driftPriorityFeeMethod';
|
|
5
8
|
|
|
6
9
|
export const DEFAULT_PRIORITY_FEE_MAP_FREQUENCY_MS = 10_000;
|
|
7
10
|
|
|
@@ -22,11 +25,6 @@ export enum PriorityFeeMethod {
|
|
|
22
25
|
DRIFT = 'drift',
|
|
23
26
|
}
|
|
24
27
|
|
|
25
|
-
export type DriftMarketInfo = {
|
|
26
|
-
marketType: string;
|
|
27
|
-
marketIndex: number;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
28
|
export type PriorityFeeSubscriberConfig = {
|
|
31
29
|
/// rpc connection, optional if using priorityFeeMethod.HELIUS
|
|
32
30
|
connection?: Connection;
|
package/src/user.ts
CHANGED
|
@@ -3162,35 +3162,6 @@ export class User {
|
|
|
3162
3162
|
return state.spotFeeStructure.feeTiers[feeTierIndex];
|
|
3163
3163
|
}
|
|
3164
3164
|
|
|
3165
|
-
/**
|
|
3166
|
-
* Calculates taker / maker fee (as a percentage, e.g. .001 = 10 basis points) for particular marketType
|
|
3167
|
-
* @param marketType
|
|
3168
|
-
* @param positionMarketIndex
|
|
3169
|
-
* @returns : {takerFee: number, makerFee: number} Precision None
|
|
3170
|
-
*/
|
|
3171
|
-
public getMarketFees(marketType: MarketType, marketIndex?: number) {
|
|
3172
|
-
const feeTier = this.getUserFeeTier(marketType);
|
|
3173
|
-
let takerFee = feeTier.feeNumerator / feeTier.feeDenominator;
|
|
3174
|
-
let makerFee =
|
|
3175
|
-
feeTier.makerRebateNumerator / feeTier.makerRebateDenominator;
|
|
3176
|
-
|
|
3177
|
-
if (marketIndex !== undefined) {
|
|
3178
|
-
let marketAccount = null;
|
|
3179
|
-
if (isVariant(marketType, 'perp')) {
|
|
3180
|
-
marketAccount = this.driftClient.getPerpMarketAccount(marketIndex);
|
|
3181
|
-
} else {
|
|
3182
|
-
marketAccount = this.driftClient.getSpotMarketAccount(marketIndex);
|
|
3183
|
-
}
|
|
3184
|
-
takerFee += (takerFee * marketAccount.feeAdjustment) / 100;
|
|
3185
|
-
makerFee += (makerFee * marketAccount.feeAdjustment) / 100;
|
|
3186
|
-
}
|
|
3187
|
-
|
|
3188
|
-
return {
|
|
3189
|
-
takerFee,
|
|
3190
|
-
makerFee,
|
|
3191
|
-
};
|
|
3192
|
-
}
|
|
3193
|
-
|
|
3194
3165
|
/**
|
|
3195
3166
|
* Calculates how much perp fee will be taken for a given sized trade
|
|
3196
3167
|
* @param quoteAmount
|
|
@@ -3198,9 +3169,10 @@ export class User {
|
|
|
3198
3169
|
*/
|
|
3199
3170
|
public calculateFeeForQuoteAmount(quoteAmount: BN, marketIndex?: number): BN {
|
|
3200
3171
|
if (marketIndex !== undefined) {
|
|
3201
|
-
const takerFeeMultiplier = this.getMarketFees(
|
|
3172
|
+
const takerFeeMultiplier = this.driftClient.getMarketFees(
|
|
3202
3173
|
MarketType.PERP,
|
|
3203
|
-
marketIndex
|
|
3174
|
+
marketIndex,
|
|
3175
|
+
this
|
|
3204
3176
|
).takerFee;
|
|
3205
3177
|
const feeAmountNum =
|
|
3206
3178
|
BigNum.from(quoteAmount, QUOTE_PRECISION_EXP).toNum() *
|