@drift-labs/sdk 0.1.11 → 0.1.12
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/clearingHouseUser.d.ts +2 -2
- package/lib/clearingHouseUser.d.ts.map +1 -1
- package/lib/clearingHouseUser.js +12 -32
- package/lib/constants/markets.d.ts.map +1 -1
- package/lib/constants/markets.js +7 -0
- package/lib/math/funding.d.ts.map +1 -1
- package/lib/math/funding.js +30 -5
- package/lib/types.d.ts +10 -47
- package/lib/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/clearingHouseUser.ts +20 -43
- package/src/constants/markets.ts +7 -0
- package/src/math/funding.ts +67 -31
- package/src/types.ts +10 -50
|
@@ -46,12 +46,12 @@ export declare class ClearingHouseUser {
|
|
|
46
46
|
* calculates unrealized position price pnl
|
|
47
47
|
* @returns : Precision QUOTE_PRECISION
|
|
48
48
|
*/
|
|
49
|
-
getUnrealizedPNL(withFunding?: boolean): BN;
|
|
49
|
+
getUnrealizedPNL(withFunding?: boolean, marketIndex?: BN): BN;
|
|
50
50
|
/**
|
|
51
51
|
* calculates unrealized funding payment pnl
|
|
52
52
|
* @returns : Precision QUOTE_PRECISION
|
|
53
53
|
*/
|
|
54
|
-
getUnrealizedFundingPNL(): BN;
|
|
54
|
+
getUnrealizedFundingPNL(marketIndex?: BN): BN;
|
|
55
55
|
/**
|
|
56
56
|
* calculates TotalCollateral: collateral + unrealized pnl
|
|
57
57
|
* @returns : Precision QUOTE_PRECISION
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clearingHouseUser.d.ts","sourceRoot":"","sources":["../src/clearingHouseUser.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,OAAO,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAW1E,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,EAKN,iBAAiB,EACjB,MAAM,GAAG,CAAC;AAGX,qBAAa,iBAAiB;IAC7B,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,iBAAiB,EAAE,qBAAqB,CAAC;IACzC,oBAAoB,CAAC,EAAE,SAAS,CAAC;IACjC,YAAY,UAAS;IACrB,YAAY,EAAE,kBAAkB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;WAEpD,IAAI,CACjB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,GAClB,iBAAiB;gBASnB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,qBAAqB;IAQzC;;;OAGG;IACU,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAQ7B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAKlC,cAAc,IAAI,WAAW;IAI7B,uBAAuB,IAAI,oBAAoB;IAItD;;;;OAIG;IACI,eAAe,CAAC,WAAW,EAAE,EAAE,GAAG,YAAY;IAaxC,uBAAuB,IAAI,OAAO,CAAC,SAAS,CAAC;IAY7C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IASvC;;;OAGG;IACI,cAAc,IAAI,EAAE;IAM3B;;;OAGG;IACI,iBAAiB,IAAI,EAAE;IAQ9B;;;OAGG;IACI,gBAAgB,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"clearingHouseUser.d.ts","sourceRoot":"","sources":["../src/clearingHouseUser.ts"],"names":[],"mappings":"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"}
|
package/lib/clearingHouseUser.js
CHANGED
|
@@ -106,8 +106,10 @@ class ClearingHouseUser {
|
|
|
106
106
|
* calculates unrealized position price pnl
|
|
107
107
|
* @returns : Precision QUOTE_PRECISION
|
|
108
108
|
*/
|
|
109
|
-
getUnrealizedPNL(withFunding) {
|
|
110
|
-
return this.getUserPositionsAccount()
|
|
109
|
+
getUnrealizedPNL(withFunding, marketIndex) {
|
|
110
|
+
return this.getUserPositionsAccount()
|
|
111
|
+
.positions.filter((pos) => marketIndex ? pos.marketIndex === marketIndex : true)
|
|
112
|
+
.reduce((pnl, marketPosition) => {
|
|
111
113
|
const market = this.clearingHouse.getMarket(marketPosition.marketIndex);
|
|
112
114
|
return pnl.add(_1.calculatePositionPNL(market, marketPosition, withFunding));
|
|
113
115
|
}, numericConstants_1.ZERO);
|
|
@@ -116,8 +118,10 @@ class ClearingHouseUser {
|
|
|
116
118
|
* calculates unrealized funding payment pnl
|
|
117
119
|
* @returns : Precision QUOTE_PRECISION
|
|
118
120
|
*/
|
|
119
|
-
getUnrealizedFundingPNL() {
|
|
120
|
-
return this.getUserPositionsAccount()
|
|
121
|
+
getUnrealizedFundingPNL(marketIndex) {
|
|
122
|
+
return this.getUserPositionsAccount()
|
|
123
|
+
.positions.filter((pos) => marketIndex ? pos.marketIndex === marketIndex : true)
|
|
124
|
+
.reduce((pnl, marketPosition) => {
|
|
121
125
|
const market = this.clearingHouse.getMarket(marketPosition.marketIndex);
|
|
122
126
|
return pnl.add(_1.calculatePositionFundingPNL(market, marketPosition));
|
|
123
127
|
}, numericConstants_1.ZERO);
|
|
@@ -298,22 +302,19 @@ class ClearingHouseUser {
|
|
|
298
302
|
// total position value after trade
|
|
299
303
|
const targetTotalPositionValueUSDC = totalCurrentPositionValueIgnoringTargetUSDC.add(proposedMarketPositionValueUSDC);
|
|
300
304
|
// if the position value after the trade is less than total collateral, there is no liq price
|
|
301
|
-
if (targetTotalPositionValueUSDC.lte(totalCollateralUSDC) &&
|
|
305
|
+
if (targetTotalPositionValueUSDC.lte(totalCollateralUSDC) &&
|
|
306
|
+
proposedMarketPosition.baseAssetAmount.gt(numericConstants_1.ZERO)) {
|
|
302
307
|
return new bn_js_1.default(-1);
|
|
303
308
|
}
|
|
304
|
-
// proportion of proposed market position to overall position
|
|
305
|
-
// const marketProportion = proposedMarketPositionValueUSDC
|
|
306
|
-
// .mul(TEN_THOUSAND)
|
|
307
|
-
// .div(targetTotalPositionValueUSDC);
|
|
308
309
|
// get current margin ratio based on current collateral and proposed total position value
|
|
309
310
|
let marginRatio;
|
|
310
|
-
if (
|
|
311
|
+
if (proposedMarketPositionValueUSDC.eq(numericConstants_1.ZERO)) {
|
|
311
312
|
marginRatio = numericConstants_1.BN_MAX;
|
|
312
313
|
}
|
|
313
314
|
else {
|
|
314
315
|
marginRatio = totalCollateralUSDC
|
|
315
316
|
.mul(numericConstants_1.TEN_THOUSAND)
|
|
316
|
-
.div(
|
|
317
|
+
.div(proposedMarketPositionValueUSDC);
|
|
317
318
|
}
|
|
318
319
|
let liqRatio = numericConstants_1.FULL_LIQUIDATION_RATIO;
|
|
319
320
|
if (partial) {
|
|
@@ -321,27 +322,6 @@ class ClearingHouseUser {
|
|
|
321
322
|
}
|
|
322
323
|
// sign of position in current market after the trade
|
|
323
324
|
const baseAssetSignIsNeg = proposedMarketPosition.baseAssetAmount.isNeg();
|
|
324
|
-
// console.log(
|
|
325
|
-
// convertToNumber(currentPrice),
|
|
326
|
-
// convertToNumber(liqRatio),
|
|
327
|
-
// convertToNumber(marginRatio),
|
|
328
|
-
// convertToNumber(marketProportion),
|
|
329
|
-
// );
|
|
330
|
-
// // if the user is long, then the liq price is the currentPrice multiplied by liqRatio/marginRatio (how many multiples lower does the current marginRatio have to go to reach the liqRatio), multiplied by the fraction of the proposed total position value that this market will take up
|
|
331
|
-
// if (!baseAssetSignIsNeg) {
|
|
332
|
-
// liqPrice = currentPrice
|
|
333
|
-
// .mul(liqRatio)
|
|
334
|
-
// .div(marginRatio)
|
|
335
|
-
// .mul(marketProportion)
|
|
336
|
-
// .div(TEN_THOUSAND);
|
|
337
|
-
// } else {
|
|
338
|
-
// // if the user is short, it's the reciprocal of the above
|
|
339
|
-
// liqPrice = currentPrice
|
|
340
|
-
// .mul(marginRatio)
|
|
341
|
-
// .div(liqRatio)
|
|
342
|
-
// .mul(TEN_THOUSAND)
|
|
343
|
-
// .div(marketProportion);
|
|
344
|
-
// }
|
|
345
325
|
let pctChange = marginRatio.abs().sub(liqRatio);
|
|
346
326
|
// if user is short, higher price is liq
|
|
347
327
|
if (baseAssetSignIsNeg) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markets.d.ts","sourceRoot":"","sources":["../../src/constants/markets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvB,aAAK,MAAM,GAAG;IACb,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,EAAE,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"markets.d.ts","sourceRoot":"","sources":["../../src/constants/markets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvB,aAAK,MAAM,GAAG;IACb,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,EAAE,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAAM,EA2C3B,CAAC"}
|
package/lib/constants/markets.js
CHANGED
|
@@ -41,4 +41,11 @@ exports.Markets = [
|
|
|
41
41
|
devnetPythOracle: 'FVb5h1VmHPfVb1RfqZckchq18GxRv4iKt8T4eVTQAqdz',
|
|
42
42
|
mainnetPythOracle: 'Ax9ujW5B9oqcv59N8m6f1BpTBq2rGeGaBcpKjC5UYsXU',
|
|
43
43
|
},
|
|
44
|
+
{
|
|
45
|
+
symbol: 'BNB-PERP',
|
|
46
|
+
baseAssetSymbol: 'BNB',
|
|
47
|
+
marketIndex: new bn_js_1.default(5),
|
|
48
|
+
devnetPythOracle: 'GwzBgrXb4PG59zjce24SF2b9JXbLEjJJTBkmytuEZj1b',
|
|
49
|
+
mainnetPythOracle: '4CkQJBxhU8EZ2UjhigbtdaPbpTe6mqf811fipYBFbSYN',
|
|
50
|
+
},
|
|
44
51
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funding.d.ts","sourceRoot":"","sources":["../../src/math/funding.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAO3C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;;;;GAMG;AACH,wBAAsB,gCAAgC,CACrD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,gBAAgB,GAAE,EAAc,GAC9B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"funding.d.ts","sourceRoot":"","sources":["../../src/math/funding.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAO3C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;;;;GAMG;AACH,wBAAsB,gCAAgC,CACrD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,gBAAgB,GAAE,EAAc,GAC9B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAoJ/B;AAED;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CAClD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,EAAc,EAChC,gBAAgB,EAAE,cAAc,GAAG,YAAY,GAAG,QAAQ,GACxD,OAAO,CAAC,EAAE,CAAC,CAgBb;AAED;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CAClD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,gBAAgB,GAAE,EAAc,GAC9B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAenB;AAED;;;;;;;GAOG;AACH,wBAAsB,yCAAyC,CAC9D,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,gBAAgB,GAAE,EAAc,GAC9B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAe3B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAKvD"}
|
package/lib/math/funding.js
CHANGED
|
@@ -52,7 +52,8 @@ function calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment =
|
|
|
52
52
|
const timeSinceLastOracleTwapUpdate = now.sub(lastOraclePriceTwapTs);
|
|
53
53
|
const oracleTwapTimeSinceLastUpdate = anchor_1.BN.max(secondsInHour, secondsInHour.sub(timeSinceLastOracleTwapUpdate));
|
|
54
54
|
const oraclePriceData = yield pythClient.getPriceData(market.amm.oracle);
|
|
55
|
-
const oraclePriceStableWithMantissa = new anchor_1.BN(((oraclePriceData.price + oraclePriceData.previousPrice) / 2) *
|
|
55
|
+
const oraclePriceStableWithMantissa = new anchor_1.BN(((oraclePriceData.price + oraclePriceData.previousPrice) / 2) *
|
|
56
|
+
numericConstants_1.MARK_PRICE_PRECISION.toNumber());
|
|
56
57
|
const oracleTwapWithMantissa = oracleTwapTimeSinceLastUpdate
|
|
57
58
|
.mul(lastOracleTwapWithMantissa)
|
|
58
59
|
.add(timeSinceLastMarkChange.mul(oraclePriceStableWithMantissa))
|
|
@@ -85,18 +86,36 @@ function calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment =
|
|
|
85
86
|
largerSide = market.baseAssetAmountLong.abs();
|
|
86
87
|
smallerSide = market.baseAssetAmountShort.abs();
|
|
87
88
|
if (twapSpread.gt(new anchor_1.BN(0))) {
|
|
88
|
-
return [
|
|
89
|
+
return [
|
|
90
|
+
markTwapWithMantissa,
|
|
91
|
+
oracleTwapWithMantissa,
|
|
92
|
+
lowerboundEst,
|
|
93
|
+
interpEst,
|
|
94
|
+
interpEst,
|
|
95
|
+
];
|
|
89
96
|
}
|
|
90
97
|
}
|
|
91
98
|
else if (market.baseAssetAmountLong.lt(market.baseAssetAmountShort.abs())) {
|
|
92
99
|
largerSide = market.baseAssetAmountShort.abs();
|
|
93
100
|
smallerSide = market.baseAssetAmountLong.abs();
|
|
94
101
|
if (twapSpread.lt(new anchor_1.BN(0))) {
|
|
95
|
-
return [
|
|
102
|
+
return [
|
|
103
|
+
markTwapWithMantissa,
|
|
104
|
+
oracleTwapWithMantissa,
|
|
105
|
+
lowerboundEst,
|
|
106
|
+
interpEst,
|
|
107
|
+
interpEst,
|
|
108
|
+
];
|
|
96
109
|
}
|
|
97
110
|
}
|
|
98
111
|
else {
|
|
99
|
-
return [
|
|
112
|
+
return [
|
|
113
|
+
markTwapWithMantissa,
|
|
114
|
+
oracleTwapWithMantissa,
|
|
115
|
+
lowerboundEst,
|
|
116
|
+
interpEst,
|
|
117
|
+
interpEst,
|
|
118
|
+
];
|
|
100
119
|
}
|
|
101
120
|
if (largerSide.gt(numericConstants_1.ZERO)) {
|
|
102
121
|
cappedAltEst = smallerSide.mul(twapSpread).div(largerSide);
|
|
@@ -118,7 +137,13 @@ function calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment =
|
|
|
118
137
|
else {
|
|
119
138
|
cappedAltEst = interpEst;
|
|
120
139
|
}
|
|
121
|
-
return [
|
|
140
|
+
return [
|
|
141
|
+
markTwapWithMantissa,
|
|
142
|
+
oracleTwapWithMantissa,
|
|
143
|
+
lowerboundEst,
|
|
144
|
+
cappedAltEst,
|
|
145
|
+
interpEst,
|
|
146
|
+
];
|
|
122
147
|
});
|
|
123
148
|
}
|
|
124
149
|
exports.calculateAllEstimatedFundingRate = calculateAllEstimatedFundingRate;
|
package/lib/types.d.ts
CHANGED
|
@@ -224,6 +224,9 @@ export declare type UserPosition = {
|
|
|
224
224
|
lastCumulativeFundingRate: BN;
|
|
225
225
|
marketIndex: BN;
|
|
226
226
|
quoteAssetAmount: BN;
|
|
227
|
+
unrealizedPnl?: BN;
|
|
228
|
+
unrealizedFundingPnl?: BN;
|
|
229
|
+
baseAssetValue?: BN;
|
|
227
230
|
};
|
|
228
231
|
export declare type UserPositionsAccount = {
|
|
229
232
|
positions: UserPosition[];
|
|
@@ -236,56 +239,16 @@ export declare type UserAccount = {
|
|
|
236
239
|
positions: PublicKey;
|
|
237
240
|
totalFeePaid: BN;
|
|
238
241
|
};
|
|
239
|
-
export
|
|
240
|
-
|
|
241
|
-
beforePrice: number;
|
|
242
|
-
afterPrice: number;
|
|
243
|
-
side: TradeSide;
|
|
244
|
-
size: number;
|
|
245
|
-
quoteSize: number;
|
|
246
|
-
ts: number;
|
|
247
|
-
fee: number;
|
|
248
|
-
marketIndex: number;
|
|
249
|
-
chainTs: number;
|
|
250
|
-
}
|
|
251
|
-
export declare type Liquidation = {
|
|
252
|
-
ts: number;
|
|
253
|
-
chainTs: number;
|
|
254
|
-
recordId: number;
|
|
242
|
+
export declare type UserSnapshotRecord = {
|
|
243
|
+
ts: BN;
|
|
255
244
|
userAuthority: PublicKey;
|
|
256
245
|
user: PublicKey;
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
feeToInsuranceFund: number;
|
|
263
|
-
liquidator: PublicKey;
|
|
264
|
-
totalCollateral: number;
|
|
265
|
-
collateral: number;
|
|
266
|
-
unrealizedPnl: number;
|
|
267
|
-
marginRatio: number;
|
|
268
|
-
};
|
|
269
|
-
export declare type Candle = {
|
|
270
|
-
open: number;
|
|
271
|
-
close: number;
|
|
272
|
-
high: number;
|
|
273
|
-
low: number;
|
|
274
|
-
volume: number;
|
|
275
|
-
start: number;
|
|
276
|
-
end: number;
|
|
246
|
+
userPositions: UserPosition[];
|
|
247
|
+
userTotalRealizedPnl: BN;
|
|
248
|
+
userTotalUnrealizedPnl: BN;
|
|
249
|
+
userTotalUnrealizedFundingPnl: BN;
|
|
250
|
+
userCollateral: BN;
|
|
277
251
|
};
|
|
278
|
-
export interface FundingPayment {
|
|
279
|
-
userPublicKey: string;
|
|
280
|
-
serverTs: number;
|
|
281
|
-
marketIndex: number;
|
|
282
|
-
amount: string;
|
|
283
|
-
blockchainTs: number;
|
|
284
|
-
baseAssetAmount: string;
|
|
285
|
-
userLastCumulativeFunding: string;
|
|
286
|
-
userLastFundingRateTs: string;
|
|
287
|
-
rate: number;
|
|
288
|
-
}
|
|
289
252
|
export interface IWallet {
|
|
290
253
|
signTransaction(tx: Transaction): Promise<Transaction>;
|
|
291
254
|
signAllTransactions(txs: Transaction[]): Promise<Transaction[]>;
|
package/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/clearingHouseUser.ts
CHANGED
|
@@ -145,30 +145,32 @@ export class ClearingHouseUser {
|
|
|
145
145
|
* calculates unrealized position price pnl
|
|
146
146
|
* @returns : Precision QUOTE_PRECISION
|
|
147
147
|
*/
|
|
148
|
-
public getUnrealizedPNL(withFunding?: boolean): BN {
|
|
149
|
-
return this.getUserPositionsAccount()
|
|
150
|
-
(
|
|
148
|
+
public getUnrealizedPNL(withFunding?: boolean, marketIndex?: BN): BN {
|
|
149
|
+
return this.getUserPositionsAccount()
|
|
150
|
+
.positions.filter((pos) =>
|
|
151
|
+
marketIndex ? pos.marketIndex === marketIndex : true
|
|
152
|
+
)
|
|
153
|
+
.reduce((pnl, marketPosition) => {
|
|
151
154
|
const market = this.clearingHouse.getMarket(marketPosition.marketIndex);
|
|
152
155
|
return pnl.add(
|
|
153
156
|
calculatePositionPNL(market, marketPosition, withFunding)
|
|
154
157
|
);
|
|
155
|
-
},
|
|
156
|
-
ZERO
|
|
157
|
-
);
|
|
158
|
+
}, ZERO);
|
|
158
159
|
}
|
|
159
160
|
|
|
160
161
|
/**
|
|
161
162
|
* calculates unrealized funding payment pnl
|
|
162
163
|
* @returns : Precision QUOTE_PRECISION
|
|
163
164
|
*/
|
|
164
|
-
public getUnrealizedFundingPNL(): BN {
|
|
165
|
-
return this.getUserPositionsAccount()
|
|
166
|
-
(
|
|
165
|
+
public getUnrealizedFundingPNL(marketIndex?: BN): BN {
|
|
166
|
+
return this.getUserPositionsAccount()
|
|
167
|
+
.positions.filter((pos) =>
|
|
168
|
+
marketIndex ? pos.marketIndex === marketIndex : true
|
|
169
|
+
)
|
|
170
|
+
.reduce((pnl, marketPosition) => {
|
|
167
171
|
const market = this.clearingHouse.getMarket(marketPosition.marketIndex);
|
|
168
172
|
return pnl.add(calculatePositionFundingPNL(market, marketPosition));
|
|
169
|
-
},
|
|
170
|
-
ZERO
|
|
171
|
-
);
|
|
173
|
+
}, ZERO);
|
|
172
174
|
}
|
|
173
175
|
|
|
174
176
|
/**
|
|
@@ -411,23 +413,21 @@ export class ClearingHouseUser {
|
|
|
411
413
|
);
|
|
412
414
|
|
|
413
415
|
// if the position value after the trade is less than total collateral, there is no liq price
|
|
414
|
-
if (
|
|
416
|
+
if (
|
|
417
|
+
targetTotalPositionValueUSDC.lte(totalCollateralUSDC) &&
|
|
418
|
+
proposedMarketPosition.baseAssetAmount.gt(ZERO)
|
|
419
|
+
) {
|
|
415
420
|
return new BN(-1);
|
|
416
421
|
}
|
|
417
422
|
|
|
418
|
-
// proportion of proposed market position to overall position
|
|
419
|
-
// const marketProportion = proposedMarketPositionValueUSDC
|
|
420
|
-
// .mul(TEN_THOUSAND)
|
|
421
|
-
// .div(targetTotalPositionValueUSDC);
|
|
422
|
-
|
|
423
423
|
// get current margin ratio based on current collateral and proposed total position value
|
|
424
424
|
let marginRatio;
|
|
425
|
-
if (
|
|
425
|
+
if (proposedMarketPositionValueUSDC.eq(ZERO)) {
|
|
426
426
|
marginRatio = BN_MAX;
|
|
427
427
|
} else {
|
|
428
428
|
marginRatio = totalCollateralUSDC
|
|
429
429
|
.mul(TEN_THOUSAND)
|
|
430
|
-
.div(
|
|
430
|
+
.div(proposedMarketPositionValueUSDC);
|
|
431
431
|
}
|
|
432
432
|
|
|
433
433
|
let liqRatio = FULL_LIQUIDATION_RATIO;
|
|
@@ -438,29 +438,6 @@ export class ClearingHouseUser {
|
|
|
438
438
|
// sign of position in current market after the trade
|
|
439
439
|
const baseAssetSignIsNeg = proposedMarketPosition.baseAssetAmount.isNeg();
|
|
440
440
|
|
|
441
|
-
// console.log(
|
|
442
|
-
// convertToNumber(currentPrice),
|
|
443
|
-
// convertToNumber(liqRatio),
|
|
444
|
-
// convertToNumber(marginRatio),
|
|
445
|
-
// convertToNumber(marketProportion),
|
|
446
|
-
// );
|
|
447
|
-
|
|
448
|
-
// // if the user is long, then the liq price is the currentPrice multiplied by liqRatio/marginRatio (how many multiples lower does the current marginRatio have to go to reach the liqRatio), multiplied by the fraction of the proposed total position value that this market will take up
|
|
449
|
-
// if (!baseAssetSignIsNeg) {
|
|
450
|
-
// liqPrice = currentPrice
|
|
451
|
-
// .mul(liqRatio)
|
|
452
|
-
// .div(marginRatio)
|
|
453
|
-
// .mul(marketProportion)
|
|
454
|
-
// .div(TEN_THOUSAND);
|
|
455
|
-
// } else {
|
|
456
|
-
// // if the user is short, it's the reciprocal of the above
|
|
457
|
-
// liqPrice = currentPrice
|
|
458
|
-
// .mul(marginRatio)
|
|
459
|
-
// .div(liqRatio)
|
|
460
|
-
// .mul(TEN_THOUSAND)
|
|
461
|
-
// .div(marketProportion);
|
|
462
|
-
// }
|
|
463
|
-
|
|
464
441
|
let pctChange = marginRatio.abs().sub(liqRatio);
|
|
465
442
|
// if user is short, higher price is liq
|
|
466
443
|
if (baseAssetSignIsNeg) {
|
package/src/constants/markets.ts
CHANGED
|
@@ -44,4 +44,11 @@ export const Markets: Market[] = [
|
|
|
44
44
|
devnetPythOracle: 'FVb5h1VmHPfVb1RfqZckchq18GxRv4iKt8T4eVTQAqdz',
|
|
45
45
|
mainnetPythOracle: 'Ax9ujW5B9oqcv59N8m6f1BpTBq2rGeGaBcpKjC5UYsXU',
|
|
46
46
|
},
|
|
47
|
+
{
|
|
48
|
+
symbol: 'BNB-PERP',
|
|
49
|
+
baseAssetSymbol: 'BNB',
|
|
50
|
+
marketIndex: new BN(5),
|
|
51
|
+
devnetPythOracle: 'GwzBgrXb4PG59zjce24SF2b9JXbLEjJJTBkmytuEZj1b',
|
|
52
|
+
mainnetPythOracle: '4CkQJBxhU8EZ2UjhigbtdaPbpTe6mqf811fipYBFbSYN',
|
|
53
|
+
},
|
|
47
54
|
];
|
package/src/math/funding.ts
CHANGED
|
@@ -43,9 +43,12 @@ export async function calculateAllEstimatedFundingRate(
|
|
|
43
43
|
const lastMarkPriceTwapTs = market.amm.lastMarkPriceTwapTs;
|
|
44
44
|
|
|
45
45
|
const timeSinceLastMarkChange = now.sub(lastMarkPriceTwapTs);
|
|
46
|
-
const markTwapTimeSinceLastUpdate = BN.max(
|
|
46
|
+
const markTwapTimeSinceLastUpdate = BN.max(
|
|
47
|
+
secondsInHour,
|
|
48
|
+
secondsInHour.sub(timeSinceLastMarkChange)
|
|
49
|
+
);
|
|
47
50
|
const baseAssetPriceWithMantissa = calculateMarkPrice(market);
|
|
48
|
-
|
|
51
|
+
|
|
49
52
|
const markTwapWithMantissa = markTwapTimeSinceLastUpdate
|
|
50
53
|
.mul(lastMarkTwapWithMantissa)
|
|
51
54
|
.add(timeSinceLastMarkChange.mul(baseAssetPriceWithMantissa))
|
|
@@ -57,9 +60,15 @@ export async function calculateAllEstimatedFundingRate(
|
|
|
57
60
|
const lastOraclePriceTwapTs = market.amm.lastOraclePriceTwapTs;
|
|
58
61
|
|
|
59
62
|
const timeSinceLastOracleTwapUpdate = now.sub(lastOraclePriceTwapTs);
|
|
60
|
-
const oracleTwapTimeSinceLastUpdate = BN.max(
|
|
63
|
+
const oracleTwapTimeSinceLastUpdate = BN.max(
|
|
64
|
+
secondsInHour,
|
|
65
|
+
secondsInHour.sub(timeSinceLastOracleTwapUpdate)
|
|
66
|
+
);
|
|
61
67
|
const oraclePriceData = await pythClient.getPriceData(market.amm.oracle);
|
|
62
|
-
const oraclePriceStableWithMantissa = new BN(
|
|
68
|
+
const oraclePriceStableWithMantissa = new BN(
|
|
69
|
+
((oraclePriceData.price + oraclePriceData.previousPrice) / 2) *
|
|
70
|
+
MARK_PRICE_PRECISION.toNumber()
|
|
71
|
+
);
|
|
63
72
|
|
|
64
73
|
const oracleTwapWithMantissa = oracleTwapTimeSinceLastUpdate
|
|
65
74
|
.mul(lastOracleTwapWithMantissa)
|
|
@@ -98,17 +107,35 @@ export async function calculateAllEstimatedFundingRate(
|
|
|
98
107
|
if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort.abs())) {
|
|
99
108
|
largerSide = market.baseAssetAmountLong.abs();
|
|
100
109
|
smallerSide = market.baseAssetAmountShort.abs();
|
|
101
|
-
if(twapSpread.gt(new BN(0))) {
|
|
102
|
-
return [
|
|
110
|
+
if (twapSpread.gt(new BN(0))) {
|
|
111
|
+
return [
|
|
112
|
+
markTwapWithMantissa,
|
|
113
|
+
oracleTwapWithMantissa,
|
|
114
|
+
lowerboundEst,
|
|
115
|
+
interpEst,
|
|
116
|
+
interpEst,
|
|
117
|
+
];
|
|
103
118
|
}
|
|
104
119
|
} else if (market.baseAssetAmountLong.lt(market.baseAssetAmountShort.abs())) {
|
|
105
120
|
largerSide = market.baseAssetAmountShort.abs();
|
|
106
121
|
smallerSide = market.baseAssetAmountLong.abs();
|
|
107
|
-
if(twapSpread.lt(new BN(0))){
|
|
108
|
-
return [
|
|
122
|
+
if (twapSpread.lt(new BN(0))) {
|
|
123
|
+
return [
|
|
124
|
+
markTwapWithMantissa,
|
|
125
|
+
oracleTwapWithMantissa,
|
|
126
|
+
lowerboundEst,
|
|
127
|
+
interpEst,
|
|
128
|
+
interpEst,
|
|
129
|
+
];
|
|
109
130
|
}
|
|
110
|
-
} else{
|
|
111
|
-
return [
|
|
131
|
+
} else {
|
|
132
|
+
return [
|
|
133
|
+
markTwapWithMantissa,
|
|
134
|
+
oracleTwapWithMantissa,
|
|
135
|
+
lowerboundEst,
|
|
136
|
+
interpEst,
|
|
137
|
+
interpEst,
|
|
138
|
+
];
|
|
112
139
|
}
|
|
113
140
|
|
|
114
141
|
if (largerSide.gt(ZERO)) {
|
|
@@ -119,7 +146,7 @@ export async function calculateAllEstimatedFundingRate(
|
|
|
119
146
|
.mul(AMM_RESERVE_PRECISION)
|
|
120
147
|
.div(largerSide);
|
|
121
148
|
|
|
122
|
-
|
|
149
|
+
cappedAltEst = cappedAltEst.add(feePoolTopOff);
|
|
123
150
|
|
|
124
151
|
cappedAltEst = cappedAltEst
|
|
125
152
|
.mul(MARK_PRICE_PRECISION)
|
|
@@ -134,8 +161,13 @@ export async function calculateAllEstimatedFundingRate(
|
|
|
134
161
|
cappedAltEst = interpEst;
|
|
135
162
|
}
|
|
136
163
|
|
|
137
|
-
|
|
138
|
-
|
|
164
|
+
return [
|
|
165
|
+
markTwapWithMantissa,
|
|
166
|
+
oracleTwapWithMantissa,
|
|
167
|
+
lowerboundEst,
|
|
168
|
+
cappedAltEst,
|
|
169
|
+
interpEst,
|
|
170
|
+
];
|
|
139
171
|
}
|
|
140
172
|
|
|
141
173
|
/**
|
|
@@ -182,11 +214,12 @@ export async function calculateLongShortFundingRate(
|
|
|
182
214
|
pythClient: PythClient,
|
|
183
215
|
periodAdjustment: BN = new BN(1)
|
|
184
216
|
): Promise<[BN, BN]> {
|
|
185
|
-
const [_1, _2, _, cappedAltEst, interpEst] =
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
217
|
+
const [_1, _2, _, cappedAltEst, interpEst] =
|
|
218
|
+
await calculateAllEstimatedFundingRate(
|
|
219
|
+
market,
|
|
220
|
+
pythClient,
|
|
221
|
+
periodAdjustment
|
|
222
|
+
);
|
|
190
223
|
|
|
191
224
|
if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort)) {
|
|
192
225
|
return [cappedAltEst, interpEst];
|
|
@@ -198,29 +231,32 @@ export async function calculateLongShortFundingRate(
|
|
|
198
231
|
}
|
|
199
232
|
|
|
200
233
|
/**
|
|
201
|
-
*
|
|
202
|
-
* @param market
|
|
203
|
-
* @param pythClient
|
|
204
|
-
* @param periodAdjustment
|
|
205
|
-
* @param estimationMethod
|
|
234
|
+
*
|
|
235
|
+
* @param market
|
|
236
|
+
* @param pythClient
|
|
237
|
+
* @param periodAdjustment
|
|
238
|
+
* @param estimationMethod
|
|
206
239
|
* @returns Estimated funding rate. : Precision //TODO-PRECISION
|
|
207
240
|
*/
|
|
208
|
-
|
|
241
|
+
export async function calculateLongShortFundingRateAndLiveTwaps(
|
|
209
242
|
market: Market,
|
|
210
243
|
pythClient: PythClient,
|
|
211
|
-
periodAdjustment: BN = new BN(1)
|
|
244
|
+
periodAdjustment: BN = new BN(1)
|
|
212
245
|
): Promise<[BN, BN, BN, BN]> {
|
|
213
|
-
const [markTwapLive, oracleTwapLive, _2, cappedAltEst, interpEst] =
|
|
214
|
-
await calculateAllEstimatedFundingRate(
|
|
246
|
+
const [markTwapLive, oracleTwapLive, _2, cappedAltEst, interpEst] =
|
|
247
|
+
await calculateAllEstimatedFundingRate(
|
|
248
|
+
market,
|
|
249
|
+
pythClient,
|
|
250
|
+
periodAdjustment
|
|
251
|
+
);
|
|
215
252
|
|
|
216
|
-
if(market.baseAssetAmountLong.gt(market.baseAssetAmountShort.abs())){
|
|
253
|
+
if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort.abs())) {
|
|
217
254
|
return [markTwapLive, oracleTwapLive, cappedAltEst, interpEst];
|
|
218
|
-
} else if(market.baseAssetAmountLong.lt(market.baseAssetAmountShort.abs())){
|
|
255
|
+
} else if (market.baseAssetAmountLong.lt(market.baseAssetAmountShort.abs())) {
|
|
219
256
|
return [markTwapLive, oracleTwapLive, interpEst, cappedAltEst];
|
|
220
|
-
} else{
|
|
257
|
+
} else {
|
|
221
258
|
return [markTwapLive, oracleTwapLive, interpEst, interpEst];
|
|
222
259
|
}
|
|
223
|
-
|
|
224
260
|
}
|
|
225
261
|
|
|
226
262
|
/**
|
package/src/types.ts
CHANGED
|
@@ -244,6 +244,9 @@ export type UserPosition = {
|
|
|
244
244
|
lastCumulativeFundingRate: BN;
|
|
245
245
|
marketIndex: BN;
|
|
246
246
|
quoteAssetAmount: BN;
|
|
247
|
+
unrealizedPnl?: BN;
|
|
248
|
+
unrealizedFundingPnl?: BN;
|
|
249
|
+
baseAssetValue?: BN;
|
|
247
250
|
};
|
|
248
251
|
|
|
249
252
|
export type UserPositionsAccount = {
|
|
@@ -259,59 +262,16 @@ export type UserAccount = {
|
|
|
259
262
|
totalFeePaid: BN;
|
|
260
263
|
};
|
|
261
264
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
price: number;
|
|
265
|
-
beforePrice: number;
|
|
266
|
-
afterPrice: number;
|
|
267
|
-
side: TradeSide;
|
|
268
|
-
size: number;
|
|
269
|
-
quoteSize: number;
|
|
270
|
-
ts: number;
|
|
271
|
-
fee: number;
|
|
272
|
-
marketIndex: number;
|
|
273
|
-
chainTs: number;
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
export type Liquidation = {
|
|
277
|
-
ts: number;
|
|
278
|
-
chainTs: number;
|
|
279
|
-
recordId: number;
|
|
265
|
+
export type UserSnapshotRecord = {
|
|
266
|
+
ts: BN;
|
|
280
267
|
userAuthority: PublicKey;
|
|
281
268
|
user: PublicKey;
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
feeToInsuranceFund: number;
|
|
288
|
-
liquidator: PublicKey;
|
|
289
|
-
totalCollateral: number;
|
|
290
|
-
collateral: number;
|
|
291
|
-
unrealizedPnl: number;
|
|
292
|
-
marginRatio: number;
|
|
293
|
-
};
|
|
294
|
-
|
|
295
|
-
export type Candle = {
|
|
296
|
-
open: number;
|
|
297
|
-
close: number;
|
|
298
|
-
high: number;
|
|
299
|
-
low: number;
|
|
300
|
-
volume: number;
|
|
301
|
-
start: number;
|
|
302
|
-
end: number;
|
|
269
|
+
userPositions: UserPosition[];
|
|
270
|
+
userTotalRealizedPnl: BN;
|
|
271
|
+
userTotalUnrealizedPnl: BN;
|
|
272
|
+
userTotalUnrealizedFundingPnl: BN;
|
|
273
|
+
userCollateral: BN;
|
|
303
274
|
};
|
|
304
|
-
export interface FundingPayment {
|
|
305
|
-
userPublicKey: string;
|
|
306
|
-
serverTs: number;
|
|
307
|
-
marketIndex: number;
|
|
308
|
-
amount: string;
|
|
309
|
-
blockchainTs: number;
|
|
310
|
-
baseAssetAmount: string;
|
|
311
|
-
userLastCumulativeFunding: string;
|
|
312
|
-
userLastFundingRateTs: string;
|
|
313
|
-
rate: number;
|
|
314
|
-
}
|
|
315
275
|
|
|
316
276
|
// # Misc Types
|
|
317
277
|
export interface IWallet {
|