@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.
@@ -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":"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"}
1
+ {"version":3,"file":"clearingHouseUser.d.ts","sourceRoot":"","sources":["../src/clearingHouseUser.ts"],"names":[],"mappings":"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"}
@@ -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().positions.reduce((pnl, marketPosition) => {
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().positions.reduce((pnl, marketPosition) => {
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) && proposedMarketPosition.baseAssetAmount.gt(numericConstants_1.ZERO)) {
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 (targetTotalPositionValueUSDC.eq(numericConstants_1.ZERO)) {
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(targetTotalPositionValueUSDC);
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,EAoC3B,CAAC"}
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"}
@@ -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,CAoH/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,CAcnB;AAED;;;;;;;GAOG;AACF,wBAAsB,yCAAyC,CAC/D,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,gBAAgB,GAAE,EAAc,GAC9B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAY3B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAKvD"}
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"}
@@ -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) * numericConstants_1.MARK_PRICE_PRECISION.toNumber());
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 [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, interpEst, interpEst];
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 [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, interpEst, interpEst];
102
+ return [
103
+ markTwapWithMantissa,
104
+ oracleTwapWithMantissa,
105
+ lowerboundEst,
106
+ interpEst,
107
+ interpEst,
108
+ ];
96
109
  }
97
110
  }
98
111
  else {
99
- return [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, interpEst, interpEst];
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 [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, cappedAltEst, interpEst];
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 interface Trade {
240
- price: number;
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
- partial: boolean;
258
- baseAssetValue: number;
259
- baseAssetValueClosed: number;
260
- liquidationFee: number;
261
- feeToLiquidator: number;
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[]>;
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drift-labs/sdk",
3
- "version": "0.1.11",
3
+ "version": "0.1.12",
4
4
  "main": "lib/index.js",
5
5
  "types": "lib/index.d.ts",
6
6
  "author": "crispheaney",
@@ -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().positions.reduce(
150
- (pnl, marketPosition) => {
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().positions.reduce(
166
- (pnl, marketPosition) => {
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 (targetTotalPositionValueUSDC.lte(totalCollateralUSDC) && proposedMarketPosition.baseAssetAmount.gt(ZERO)) {
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 (targetTotalPositionValueUSDC.eq(ZERO)) {
425
+ if (proposedMarketPositionValueUSDC.eq(ZERO)) {
426
426
  marginRatio = BN_MAX;
427
427
  } else {
428
428
  marginRatio = totalCollateralUSDC
429
429
  .mul(TEN_THOUSAND)
430
- .div(targetTotalPositionValueUSDC);
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) {
@@ -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
  ];
@@ -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(secondsInHour, secondsInHour.sub(timeSinceLastMarkChange));
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(secondsInHour, secondsInHour.sub(timeSinceLastOracleTwapUpdate));
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(((oraclePriceData.price + oraclePriceData.previousPrice)/2) * MARK_PRICE_PRECISION.toNumber());
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 [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, interpEst, interpEst];
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 [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, interpEst, interpEst];
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 [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, interpEst, interpEst];
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
- cappedAltEst = cappedAltEst.add(feePoolTopOff);
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
- return [markTwapWithMantissa, oracleTwapWithMantissa, lowerboundEst, cappedAltEst, interpEst];
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] = await calculateAllEstimatedFundingRate(
186
- market,
187
- pythClient,
188
- periodAdjustment
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
- export async function calculateLongShortFundingRateAndLiveTwaps(
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(market, pythClient, periodAdjustment);
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
- // # UI History Server Data Types
263
- export interface Trade {
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
- partial: boolean;
283
- baseAssetValue: number;
284
- baseAssetValueClosed: number;
285
- liquidationFee: number;
286
- feeToLiquidator: number;
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 {