@drift-labs/sdk 0.1.36-master.1 → 0.1.36-master.2
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/lib/math/amm.d.ts +1 -0
- package/lib/math/amm.js +16 -3
- package/lib/math/state.d.ts +8 -0
- package/lib/math/state.js +15 -0
- package/package.json +1 -1
- package/src/math/amm.ts +20 -2
- package/src/math/state.ts +14 -0
package/lib/math/amm.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ export declare type AssetType = 'quote' | 'base';
|
|
|
21
21
|
* @returns quoteAssetReserve and baseAssetReserve after swap. : Precision AMM_RESERVE_PRECISION
|
|
22
22
|
*/
|
|
23
23
|
export declare function calculateAmmReservesAfterSwap(amm: Pick<AMM, 'pegMultiplier' | 'quoteAssetReserve' | 'sqrtK' | 'baseAssetReserve'>, inputAssetType: AssetType, swapAmount: BN, swapDirection: SwapDirection): [BN, BN];
|
|
24
|
+
export declare function calculateSpread(amm: AMM, direction: PositionDirection): number;
|
|
24
25
|
export declare function calculateSpreadReserves(amm: AMM, direction: PositionDirection): {
|
|
25
26
|
baseAssetReserve: BN;
|
|
26
27
|
quoteAssetReserve: BN;
|
package/lib/math/amm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.calculateQuoteAssetAmountSwapped = exports.calculateBudgetedPeg = exports.calculateBudgetedK = exports.calculateMaxBaseAssetAmountToTrade = exports.calculateTerminalPrice = exports.calculateRepegCost = exports.calculateAdjustKCost = exports.getSwapDirection = exports.calculateSwapOutput = exports.calculateSpreadReserves = exports.calculateAmmReservesAfterSwap = exports.calculatePrice = void 0;
|
|
3
|
+
exports.calculateQuoteAssetAmountSwapped = exports.calculateBudgetedPeg = exports.calculateBudgetedK = exports.calculateMaxBaseAssetAmountToTrade = exports.calculateTerminalPrice = exports.calculateRepegCost = exports.calculateAdjustKCost = exports.getSwapDirection = exports.calculateSwapOutput = exports.calculateSpreadReserves = exports.calculateSpread = exports.calculateAmmReservesAfterSwap = exports.calculatePrice = void 0;
|
|
4
4
|
const anchor_1 = require("@project-serum/anchor");
|
|
5
5
|
const numericConstants_1 = require("../constants/numericConstants");
|
|
6
6
|
const position_1 = require("./position");
|
|
@@ -51,14 +51,27 @@ function calculateAmmReservesAfterSwap(amm, inputAssetType, swapAmount, swapDire
|
|
|
51
51
|
return [newQuoteAssetReserve, newBaseAssetReserve];
|
|
52
52
|
}
|
|
53
53
|
exports.calculateAmmReservesAfterSwap = calculateAmmReservesAfterSwap;
|
|
54
|
+
function calculateSpread(amm, direction) {
|
|
55
|
+
let spread;
|
|
56
|
+
// future logic
|
|
57
|
+
if ((0, types_1.isVariant)(direction, 'long')) {
|
|
58
|
+
spread = amm.baseSpread;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
spread = amm.baseSpread;
|
|
62
|
+
}
|
|
63
|
+
return spread;
|
|
64
|
+
}
|
|
65
|
+
exports.calculateSpread = calculateSpread;
|
|
54
66
|
function calculateSpreadReserves(amm, direction) {
|
|
55
|
-
|
|
67
|
+
const spread = calculateSpread(amm, direction);
|
|
68
|
+
if (spread === 0) {
|
|
56
69
|
return {
|
|
57
70
|
baseAssetReserve: amm.baseAssetReserve,
|
|
58
71
|
quoteAssetReserve: amm.quoteAssetReserve,
|
|
59
72
|
};
|
|
60
73
|
}
|
|
61
|
-
const quoteAsserReserveDelta = amm.quoteAssetReserve.div(numericConstants_1.BID_ASK_SPREAD_PRECISION.div(new anchor_1.BN(
|
|
74
|
+
const quoteAsserReserveDelta = amm.quoteAssetReserve.div(numericConstants_1.BID_ASK_SPREAD_PRECISION.div(new anchor_1.BN(spread / 4)));
|
|
62
75
|
let quoteAssetReserve;
|
|
63
76
|
if ((0, types_1.isVariant)(direction, 'long')) {
|
|
64
77
|
quoteAssetReserve = amm.quoteAssetReserve.add(quoteAsserReserveDelta);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getExchangeFee = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Get the clearing house percent fee charged on notional of taking trades
|
|
6
|
+
*
|
|
7
|
+
* @param state
|
|
8
|
+
* @returns Precision : basis points (bps)
|
|
9
|
+
*/
|
|
10
|
+
function getExchangeFee(state) {
|
|
11
|
+
const exchangeFee = state.feeStructure.feeNumerator.toNumber() /
|
|
12
|
+
state.feeStructure.feeDenominator.toNumber();
|
|
13
|
+
return exchangeFee;
|
|
14
|
+
}
|
|
15
|
+
exports.getExchangeFee = getExchangeFee;
|
package/package.json
CHANGED
package/src/math/amm.ts
CHANGED
|
@@ -98,6 +98,22 @@ export function calculateAmmReservesAfterSwap(
|
|
|
98
98
|
return [newQuoteAssetReserve, newBaseAssetReserve];
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
+
export function calculateSpread(
|
|
102
|
+
amm: AMM,
|
|
103
|
+
direction: PositionDirection
|
|
104
|
+
): number {
|
|
105
|
+
let spread;
|
|
106
|
+
|
|
107
|
+
// future logic
|
|
108
|
+
if (isVariant(direction, 'long')) {
|
|
109
|
+
spread = amm.baseSpread;
|
|
110
|
+
} else {
|
|
111
|
+
spread = amm.baseSpread;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return spread;
|
|
115
|
+
}
|
|
116
|
+
|
|
101
117
|
export function calculateSpreadReserves(
|
|
102
118
|
amm: AMM,
|
|
103
119
|
direction: PositionDirection
|
|
@@ -105,7 +121,9 @@ export function calculateSpreadReserves(
|
|
|
105
121
|
baseAssetReserve: BN;
|
|
106
122
|
quoteAssetReserve: BN;
|
|
107
123
|
} {
|
|
108
|
-
|
|
124
|
+
const spread = calculateSpread(amm, direction);
|
|
125
|
+
|
|
126
|
+
if (spread === 0) {
|
|
109
127
|
return {
|
|
110
128
|
baseAssetReserve: amm.baseAssetReserve,
|
|
111
129
|
quoteAssetReserve: amm.quoteAssetReserve,
|
|
@@ -113,7 +131,7 @@ export function calculateSpreadReserves(
|
|
|
113
131
|
}
|
|
114
132
|
|
|
115
133
|
const quoteAsserReserveDelta = amm.quoteAssetReserve.div(
|
|
116
|
-
BID_ASK_SPREAD_PRECISION.div(new BN(
|
|
134
|
+
BID_ASK_SPREAD_PRECISION.div(new BN(spread / 4))
|
|
117
135
|
);
|
|
118
136
|
|
|
119
137
|
let quoteAssetReserve;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { StateAccount } from '../types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Get the clearing house percent fee charged on notional of taking trades
|
|
5
|
+
*
|
|
6
|
+
* @param state
|
|
7
|
+
* @returns Precision : basis points (bps)
|
|
8
|
+
*/
|
|
9
|
+
export function getExchangeFee(state: StateAccount): number {
|
|
10
|
+
const exchangeFee =
|
|
11
|
+
state.feeStructure.feeNumerator.toNumber() /
|
|
12
|
+
state.feeStructure.feeDenominator.toNumber();
|
|
13
|
+
return exchangeFee;
|
|
14
|
+
}
|