@drift-labs/sdk 2.150.0-beta.3 → 2.150.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 CHANGED
@@ -1 +1 @@
1
- 2.150.0-beta.3
1
+ 2.150.0-beta.5
@@ -71,7 +71,7 @@ function decodeUser(buffer) {
71
71
  const quoteAssetAmount = readSignedBigInt64LE(buffer, offset + 16);
72
72
  const lpShares = readUnsignedBigInt64LE(buffer, offset + 64);
73
73
  const openOrders = buffer.readUInt8(offset + 94);
74
- const positionFlag = buffer.readUInt8(offset + 95);
74
+ const positionFlag = 0;
75
75
  const isolatedPositionScaledBalance = readUnsignedBigInt64LE(buffer, offset + 96);
76
76
  if (baseAssetAmount.eq(numericConstants_1.ZERO) &&
77
77
  openOrders === 0 &&
@@ -62,6 +62,7 @@ export declare class User {
62
62
  */
63
63
  getTokenAmount(marketIndex: number): BN;
64
64
  getEmptyPosition(marketIndex: number): PerpPosition;
65
+ isPositionEmpty(position: PerpPosition): boolean;
65
66
  getIsolatePerpPositionTokenAmount(perpMarketIndex: number): BN;
66
67
  getClonedPosition(position: PerpPosition): PerpPosition;
67
68
  getOrderForUserAccount(userAccount: UserAccount, orderId: number): Order | undefined;
@@ -93,7 +94,7 @@ export declare class User {
93
94
  * calculates Buying Power = free collateral / initial margin ratio
94
95
  * @returns : Precision QUOTE_PRECISION
95
96
  */
96
- getPerpBuyingPower(marketIndex: number, collateralBuffer?: BN, enterHighLeverageMode?: any, maxMarginRatio?: any): BN;
97
+ getPerpBuyingPower(marketIndex: number, collateralBuffer?: BN, enterHighLeverageMode?: any, maxMarginRatio?: any, positionType?: 'isolated' | 'cross'): BN;
97
98
  getPerpBuyingPowerFromFreeCollateralAndBaseAssetAmount(marketIndex: number, freeCollateral: BN, baseAssetAmount: BN, enterHighLeverageMode?: any, perpMarketMaxMarginRatio?: any): BN;
98
99
  /**
99
100
  * calculates Free Collateral = Total collateral - margin requirement
@@ -311,7 +312,7 @@ export declare class User {
311
312
  * @param isLp
312
313
  * @returns { tradeSize: BN, oppositeSideTradeSize: BN} : Precision QUOTE_PRECISION
313
314
  */
314
- getMaxTradeSizeUSDCForPerp(targetMarketIndex: number, tradeSide: PositionDirection, isLp?: boolean, enterHighLeverageMode?: any, maxMarginRatio?: any): {
315
+ getMaxTradeSizeUSDCForPerp(targetMarketIndex: number, tradeSide: PositionDirection, isLp?: boolean, enterHighLeverageMode?: any, maxMarginRatio?: any, positionType?: 'isolated' | 'cross'): {
315
316
  tradeSize: BN;
316
317
  oppositeSideTradeSize: BN;
317
318
  };
@@ -191,6 +191,9 @@ class User {
191
191
  positionFlag: 0,
192
192
  };
193
193
  }
194
+ isPositionEmpty(position) {
195
+ return position.baseAssetAmount.eq(numericConstants_1.ZERO) && position.openOrders === 0;
196
+ }
194
197
  getIsolatePerpPositionTokenAmount(perpMarketIndex) {
195
198
  var _a;
196
199
  const perpPosition = this.getPerpPosition(perpMarketIndex);
@@ -283,14 +286,21 @@ class User {
283
286
  * calculates Buying Power = free collateral / initial margin ratio
284
287
  * @returns : Precision QUOTE_PRECISION
285
288
  */
286
- getPerpBuyingPower(marketIndex, collateralBuffer = numericConstants_1.ZERO, enterHighLeverageMode = undefined, maxMarginRatio = undefined) {
289
+ getPerpBuyingPower(marketIndex, collateralBuffer = numericConstants_1.ZERO, enterHighLeverageMode = undefined, maxMarginRatio = undefined, positionType = 'cross') {
287
290
  const perpPosition = this.getPerpPositionOrEmpty(marketIndex);
288
291
  const perpMarket = this.driftClient.getPerpMarketAccount(marketIndex);
289
292
  const oraclePriceData = this.getOracleDataForPerpMarket(marketIndex);
290
293
  const worstCaseBaseAssetAmount = perpPosition
291
294
  ? (0, margin_2.calculateWorstCaseBaseAssetAmount)(perpPosition, perpMarket, oraclePriceData.price)
292
295
  : numericConstants_1.ZERO;
293
- const freeCollateral = this.getFreeCollateral('Initial', enterHighLeverageMode).sub(collateralBuffer);
296
+ let freeCollateral;
297
+ if (positionType === 'isolated' && this.isPositionEmpty(perpPosition)) {
298
+ const { totalAssetValue: quoteSpotMarketAssetValue, totalLiabilityValue: quoteSpotMarketLiabilityValue, } = this.getSpotMarketAssetAndLiabilityValue(perpMarket.quoteSpotMarketIndex, 'Initial', undefined, undefined, true);
299
+ freeCollateral = quoteSpotMarketAssetValue.sub(quoteSpotMarketLiabilityValue);
300
+ }
301
+ else {
302
+ freeCollateral = this.getFreeCollateral('Initial', enterHighLeverageMode, positionType === 'isolated' ? marketIndex : undefined).sub(collateralBuffer);
303
+ }
294
304
  return this.getPerpBuyingPowerFromFreeCollateralAndBaseAssetAmount(marketIndex, freeCollateral, worstCaseBaseAssetAmount, enterHighLeverageMode, maxMarginRatio || perpPosition.maxMarginRatio);
295
305
  }
296
306
  getPerpBuyingPowerFromFreeCollateralAndBaseAssetAmount(marketIndex, freeCollateral, baseAssetAmount, enterHighLeverageMode = undefined, perpMarketMaxMarginRatio = undefined) {
@@ -303,16 +313,15 @@ class User {
303
313
  * @returns : Precision QUOTE_PRECISION
304
314
  */
305
315
  getFreeCollateral(marginCategory = 'Initial', enterHighLeverageMode = false, perpMarketIndex) {
306
- const { totalCollateral, marginRequirement, getIsolatedFreeCollateral } = this.getMarginCalculation(marginCategory, {
316
+ const calc = this.getMarginCalculation(marginCategory, {
307
317
  enteringHighLeverage: enterHighLeverageMode,
308
318
  strict: marginCategory === 'Initial',
309
319
  });
310
320
  if (perpMarketIndex !== undefined) {
311
- return getIsolatedFreeCollateral(perpMarketIndex);
321
+ return calc.getIsolatedFreeCollateral(perpMarketIndex);
312
322
  }
313
323
  else {
314
- const freeCollateral = totalCollateral.sub(marginRequirement);
315
- return freeCollateral.gte(numericConstants_1.ZERO) ? freeCollateral : numericConstants_1.ZERO;
324
+ return calc.getCrossFreeCollateral();
316
325
  }
317
326
  }
318
327
  getMarginRequirement(marginCategory, liquidationBuffer, strict, includeOpenOrders, enteringHighLeverage, perpMarketIndex) {
@@ -1407,7 +1416,7 @@ class User {
1407
1416
  * @param isLp
1408
1417
  * @returns { tradeSize: BN, oppositeSideTradeSize: BN} : Precision QUOTE_PRECISION
1409
1418
  */
1410
- getMaxTradeSizeUSDCForPerp(targetMarketIndex, tradeSide, isLp = false, enterHighLeverageMode = undefined, maxMarginRatio = undefined) {
1419
+ getMaxTradeSizeUSDCForPerp(targetMarketIndex, tradeSide, isLp = false, enterHighLeverageMode = undefined, maxMarginRatio = undefined, positionType = 'cross') {
1411
1420
  let tradeSize = numericConstants_1.ZERO;
1412
1421
  let oppositeSideTradeSize = numericConstants_1.ZERO;
1413
1422
  const currentPosition = this.getPerpPositionOrEmpty(targetMarketIndex);
@@ -1429,7 +1438,7 @@ class User {
1429
1438
  const oppositeSizeLiabilityValue = targetingSameSide
1430
1439
  ? numericConstants_1.ZERO
1431
1440
  : (0, margin_1.calculatePerpLiabilityValue)(currentPosition.baseAssetAmount, oracleData.price, (0, types_1.isVariant)(marketAccount.contractType, 'prediction'));
1432
- const maxPositionSize = this.getPerpBuyingPower(targetMarketIndex, lpBuffer, enterHighLeverageMode, maxMarginRatio);
1441
+ const maxPositionSize = this.getPerpBuyingPower(targetMarketIndex, lpBuffer, enterHighLeverageMode, maxMarginRatio, positionType);
1433
1442
  if (maxPositionSize.gte(numericConstants_1.ZERO)) {
1434
1443
  if (oppositeSizeLiabilityValue.eq(numericConstants_1.ZERO)) {
1435
1444
  // case 1 : Regular trade where current total position less than max, and no opposite position to account for
@@ -71,7 +71,7 @@ function decodeUser(buffer) {
71
71
  const quoteAssetAmount = readSignedBigInt64LE(buffer, offset + 16);
72
72
  const lpShares = readUnsignedBigInt64LE(buffer, offset + 64);
73
73
  const openOrders = buffer.readUInt8(offset + 94);
74
- const positionFlag = buffer.readUInt8(offset + 95);
74
+ const positionFlag = 0;
75
75
  const isolatedPositionScaledBalance = readUnsignedBigInt64LE(buffer, offset + 96);
76
76
  if (baseAssetAmount.eq(numericConstants_1.ZERO) &&
77
77
  openOrders === 0 &&
@@ -62,6 +62,7 @@ export declare class User {
62
62
  */
63
63
  getTokenAmount(marketIndex: number): BN;
64
64
  getEmptyPosition(marketIndex: number): PerpPosition;
65
+ isPositionEmpty(position: PerpPosition): boolean;
65
66
  getIsolatePerpPositionTokenAmount(perpMarketIndex: number): BN;
66
67
  getClonedPosition(position: PerpPosition): PerpPosition;
67
68
  getOrderForUserAccount(userAccount: UserAccount, orderId: number): Order | undefined;
@@ -93,7 +94,7 @@ export declare class User {
93
94
  * calculates Buying Power = free collateral / initial margin ratio
94
95
  * @returns : Precision QUOTE_PRECISION
95
96
  */
96
- getPerpBuyingPower(marketIndex: number, collateralBuffer?: BN, enterHighLeverageMode?: any, maxMarginRatio?: any): BN;
97
+ getPerpBuyingPower(marketIndex: number, collateralBuffer?: BN, enterHighLeverageMode?: any, maxMarginRatio?: any, positionType?: 'isolated' | 'cross'): BN;
97
98
  getPerpBuyingPowerFromFreeCollateralAndBaseAssetAmount(marketIndex: number, freeCollateral: BN, baseAssetAmount: BN, enterHighLeverageMode?: any, perpMarketMaxMarginRatio?: any): BN;
98
99
  /**
99
100
  * calculates Free Collateral = Total collateral - margin requirement
@@ -311,7 +312,7 @@ export declare class User {
311
312
  * @param isLp
312
313
  * @returns { tradeSize: BN, oppositeSideTradeSize: BN} : Precision QUOTE_PRECISION
313
314
  */
314
- getMaxTradeSizeUSDCForPerp(targetMarketIndex: number, tradeSide: PositionDirection, isLp?: boolean, enterHighLeverageMode?: any, maxMarginRatio?: any): {
315
+ getMaxTradeSizeUSDCForPerp(targetMarketIndex: number, tradeSide: PositionDirection, isLp?: boolean, enterHighLeverageMode?: any, maxMarginRatio?: any, positionType?: 'isolated' | 'cross'): {
315
316
  tradeSize: BN;
316
317
  oppositeSideTradeSize: BN;
317
318
  };
@@ -1 +1 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/user.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/user.ts"],"names":[],"mappings":"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"}
package/lib/node/user.js CHANGED
@@ -191,6 +191,9 @@ class User {
191
191
  positionFlag: 0,
192
192
  };
193
193
  }
194
+ isPositionEmpty(position) {
195
+ return position.baseAssetAmount.eq(numericConstants_1.ZERO) && position.openOrders === 0;
196
+ }
194
197
  getIsolatePerpPositionTokenAmount(perpMarketIndex) {
195
198
  var _a;
196
199
  const perpPosition = this.getPerpPosition(perpMarketIndex);
@@ -283,14 +286,21 @@ class User {
283
286
  * calculates Buying Power = free collateral / initial margin ratio
284
287
  * @returns : Precision QUOTE_PRECISION
285
288
  */
286
- getPerpBuyingPower(marketIndex, collateralBuffer = numericConstants_1.ZERO, enterHighLeverageMode = undefined, maxMarginRatio = undefined) {
289
+ getPerpBuyingPower(marketIndex, collateralBuffer = numericConstants_1.ZERO, enterHighLeverageMode = undefined, maxMarginRatio = undefined, positionType = 'cross') {
287
290
  const perpPosition = this.getPerpPositionOrEmpty(marketIndex);
288
291
  const perpMarket = this.driftClient.getPerpMarketAccount(marketIndex);
289
292
  const oraclePriceData = this.getOracleDataForPerpMarket(marketIndex);
290
293
  const worstCaseBaseAssetAmount = perpPosition
291
294
  ? (0, margin_2.calculateWorstCaseBaseAssetAmount)(perpPosition, perpMarket, oraclePriceData.price)
292
295
  : numericConstants_1.ZERO;
293
- const freeCollateral = this.getFreeCollateral('Initial', enterHighLeverageMode).sub(collateralBuffer);
296
+ let freeCollateral;
297
+ if (positionType === 'isolated' && this.isPositionEmpty(perpPosition)) {
298
+ const { totalAssetValue: quoteSpotMarketAssetValue, totalLiabilityValue: quoteSpotMarketLiabilityValue, } = this.getSpotMarketAssetAndLiabilityValue(perpMarket.quoteSpotMarketIndex, 'Initial', undefined, undefined, true);
299
+ freeCollateral = quoteSpotMarketAssetValue.sub(quoteSpotMarketLiabilityValue);
300
+ }
301
+ else {
302
+ freeCollateral = this.getFreeCollateral('Initial', enterHighLeverageMode, positionType === 'isolated' ? marketIndex : undefined).sub(collateralBuffer);
303
+ }
294
304
  return this.getPerpBuyingPowerFromFreeCollateralAndBaseAssetAmount(marketIndex, freeCollateral, worstCaseBaseAssetAmount, enterHighLeverageMode, maxMarginRatio || perpPosition.maxMarginRatio);
295
305
  }
296
306
  getPerpBuyingPowerFromFreeCollateralAndBaseAssetAmount(marketIndex, freeCollateral, baseAssetAmount, enterHighLeverageMode = undefined, perpMarketMaxMarginRatio = undefined) {
@@ -303,16 +313,15 @@ class User {
303
313
  * @returns : Precision QUOTE_PRECISION
304
314
  */
305
315
  getFreeCollateral(marginCategory = 'Initial', enterHighLeverageMode = false, perpMarketIndex) {
306
- const { totalCollateral, marginRequirement, getIsolatedFreeCollateral } = this.getMarginCalculation(marginCategory, {
316
+ const calc = this.getMarginCalculation(marginCategory, {
307
317
  enteringHighLeverage: enterHighLeverageMode,
308
318
  strict: marginCategory === 'Initial',
309
319
  });
310
320
  if (perpMarketIndex !== undefined) {
311
- return getIsolatedFreeCollateral(perpMarketIndex);
321
+ return calc.getIsolatedFreeCollateral(perpMarketIndex);
312
322
  }
313
323
  else {
314
- const freeCollateral = totalCollateral.sub(marginRequirement);
315
- return freeCollateral.gte(numericConstants_1.ZERO) ? freeCollateral : numericConstants_1.ZERO;
324
+ return calc.getCrossFreeCollateral();
316
325
  }
317
326
  }
318
327
  getMarginRequirement(marginCategory, liquidationBuffer, strict, includeOpenOrders, enteringHighLeverage, perpMarketIndex) {
@@ -1407,7 +1416,7 @@ class User {
1407
1416
  * @param isLp
1408
1417
  * @returns { tradeSize: BN, oppositeSideTradeSize: BN} : Precision QUOTE_PRECISION
1409
1418
  */
1410
- getMaxTradeSizeUSDCForPerp(targetMarketIndex, tradeSide, isLp = false, enterHighLeverageMode = undefined, maxMarginRatio = undefined) {
1419
+ getMaxTradeSizeUSDCForPerp(targetMarketIndex, tradeSide, isLp = false, enterHighLeverageMode = undefined, maxMarginRatio = undefined, positionType = 'cross') {
1411
1420
  let tradeSize = numericConstants_1.ZERO;
1412
1421
  let oppositeSideTradeSize = numericConstants_1.ZERO;
1413
1422
  const currentPosition = this.getPerpPositionOrEmpty(targetMarketIndex);
@@ -1429,7 +1438,7 @@ class User {
1429
1438
  const oppositeSizeLiabilityValue = targetingSameSide
1430
1439
  ? numericConstants_1.ZERO
1431
1440
  : (0, margin_1.calculatePerpLiabilityValue)(currentPosition.baseAssetAmount, oracleData.price, (0, types_1.isVariant)(marketAccount.contractType, 'prediction'));
1432
- const maxPositionSize = this.getPerpBuyingPower(targetMarketIndex, lpBuffer, enterHighLeverageMode, maxMarginRatio);
1441
+ const maxPositionSize = this.getPerpBuyingPower(targetMarketIndex, lpBuffer, enterHighLeverageMode, maxMarginRatio, positionType);
1433
1442
  if (maxPositionSize.gte(numericConstants_1.ZERO)) {
1434
1443
  if (oppositeSizeLiabilityValue.eq(numericConstants_1.ZERO)) {
1435
1444
  // case 1 : Regular trade where current total position less than max, and no opposite position to account for
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drift-labs/sdk",
3
- "version": "2.150.0-beta.3",
3
+ "version": "2.150.0-beta.5",
4
4
  "main": "lib/node/index.js",
5
5
  "types": "lib/node/index.d.ts",
6
6
  "module": "./lib/browser/index.js",
@@ -84,7 +84,7 @@ export function decodeUser(buffer: Buffer): UserAccount {
84
84
  const quoteAssetAmount = readSignedBigInt64LE(buffer, offset + 16);
85
85
  const lpShares = readUnsignedBigInt64LE(buffer, offset + 64);
86
86
  const openOrders = buffer.readUInt8(offset + 94);
87
- const positionFlag = buffer.readUInt8(offset + 95);
87
+ const positionFlag = 0;
88
88
  const isolatedPositionScaledBalance = readUnsignedBigInt64LE(
89
89
  buffer,
90
90
  offset + 96
package/src/user.ts CHANGED
@@ -352,6 +352,10 @@ export class User {
352
352
  };
353
353
  }
354
354
 
355
+ public isPositionEmpty(position: PerpPosition): boolean {
356
+ return position.baseAssetAmount.eq(ZERO) && position.openOrders === 0;
357
+ }
358
+
355
359
  public getIsolatePerpPositionTokenAmount(perpMarketIndex: number): BN {
356
360
  const perpPosition = this.getPerpPosition(perpMarketIndex);
357
361
  if (!perpPosition) return ZERO;
@@ -485,7 +489,8 @@ export class User {
485
489
  marketIndex: number,
486
490
  collateralBuffer = ZERO,
487
491
  enterHighLeverageMode = undefined,
488
- maxMarginRatio = undefined
492
+ maxMarginRatio = undefined,
493
+ positionType: 'isolated' | 'cross' = 'cross'
489
494
  ): BN {
490
495
  const perpPosition = this.getPerpPositionOrEmpty(marketIndex);
491
496
 
@@ -499,10 +504,29 @@ export class User {
499
504
  )
500
505
  : ZERO;
501
506
 
502
- const freeCollateral = this.getFreeCollateral(
503
- 'Initial',
504
- enterHighLeverageMode
505
- ).sub(collateralBuffer);
507
+ let freeCollateral: BN;
508
+ if (positionType === 'isolated' && this.isPositionEmpty(perpPosition)) {
509
+ const {
510
+ totalAssetValue: quoteSpotMarketAssetValue,
511
+ totalLiabilityValue: quoteSpotMarketLiabilityValue,
512
+ } = this.getSpotMarketAssetAndLiabilityValue(
513
+ perpMarket.quoteSpotMarketIndex,
514
+ 'Initial',
515
+ undefined,
516
+ undefined,
517
+ true
518
+ );
519
+
520
+ freeCollateral = quoteSpotMarketAssetValue.sub(
521
+ quoteSpotMarketLiabilityValue
522
+ );
523
+ } else {
524
+ freeCollateral = this.getFreeCollateral(
525
+ 'Initial',
526
+ enterHighLeverageMode,
527
+ positionType === 'isolated' ? marketIndex : undefined
528
+ ).sub(collateralBuffer);
529
+ }
506
530
 
507
531
  return this.getPerpBuyingPowerFromFreeCollateralAndBaseAssetAmount(
508
532
  marketIndex,
@@ -544,17 +568,15 @@ export class User {
544
568
  enterHighLeverageMode = false,
545
569
  perpMarketIndex?: number
546
570
  ): BN {
547
- const { totalCollateral, marginRequirement, getIsolatedFreeCollateral } =
548
- this.getMarginCalculation(marginCategory, {
549
- enteringHighLeverage: enterHighLeverageMode,
550
- strict: marginCategory === 'Initial',
551
- });
571
+ const calc = this.getMarginCalculation(marginCategory, {
572
+ enteringHighLeverage: enterHighLeverageMode,
573
+ strict: marginCategory === 'Initial',
574
+ });
552
575
 
553
576
  if (perpMarketIndex !== undefined) {
554
- return getIsolatedFreeCollateral(perpMarketIndex);
577
+ return calc.getIsolatedFreeCollateral(perpMarketIndex);
555
578
  } else {
556
- const freeCollateral = totalCollateral.sub(marginRequirement);
557
- return freeCollateral.gte(ZERO) ? freeCollateral : ZERO;
579
+ return calc.getCrossFreeCollateral();
558
580
  }
559
581
  }
560
582
 
@@ -2752,7 +2774,8 @@ export class User {
2752
2774
  tradeSide: PositionDirection,
2753
2775
  isLp = false,
2754
2776
  enterHighLeverageMode = undefined,
2755
- maxMarginRatio = undefined
2777
+ maxMarginRatio = undefined,
2778
+ positionType: 'isolated' | 'cross' = 'cross'
2756
2779
  ): { tradeSize: BN; oppositeSideTradeSize: BN } {
2757
2780
  let tradeSize = ZERO;
2758
2781
  let oppositeSideTradeSize = ZERO;
@@ -2792,7 +2815,8 @@ export class User {
2792
2815
  targetMarketIndex,
2793
2816
  lpBuffer,
2794
2817
  enterHighLeverageMode,
2795
- maxMarginRatio
2818
+ maxMarginRatio,
2819
+ positionType
2796
2820
  );
2797
2821
 
2798
2822
  if (maxPositionSize.gte(ZERO)) {