@@ -655,7 +655,11 @@ export class User {
655655 * calculates Buying Power = free collateral / initial margin ratio
656656 * @returns : Precision QUOTE_PRECISION
657657 */
658- public getPerpBuyingPower ( marketIndex : number , collateralBuffer = ZERO ) : BN {
658+ public getPerpBuyingPower (
659+ marketIndex : number ,
660+ collateralBuffer = ZERO ,
661+ enterHighLeverageMode = false
662+ ) : BN {
659663 const perpPosition = this . getPerpPositionWithLPSettle (
660664 marketIndex ,
661665 undefined ,
@@ -677,21 +681,23 @@ export class User {
677681 return this . getPerpBuyingPowerFromFreeCollateralAndBaseAssetAmount (
678682 marketIndex ,
679683 freeCollateral ,
680- worstCaseBaseAssetAmount
684+ worstCaseBaseAssetAmount ,
685+ enterHighLeverageMode
681686 ) ;
682687 }
683688
684689 getPerpBuyingPowerFromFreeCollateralAndBaseAssetAmount (
685690 marketIndex : number ,
686691 freeCollateral : BN ,
687- baseAssetAmount : BN
692+ baseAssetAmount : BN ,
693+ enterHighLeverageMode = false
688694 ) : BN {
689695 const marginRatio = calculateMarketMarginRatio (
690696 this . driftClient . getPerpMarketAccount ( marketIndex ) ,
691697 baseAssetAmount ,
692698 'Initial' ,
693699 this . getUserAccount ( ) . maxMarginRatio ,
694- this . isHighLeverageMode ( )
700+ enterHighLeverageMode || this . isHighLeverageMode ( )
695701 ) ;
696702
697703 return freeCollateral . mul ( MARGIN_PRECISION ) . div ( new BN ( marginRatio ) ) ;
@@ -1860,12 +1866,14 @@ export class User {
18601866 * for large sizes where imf factor activates, result is a lower bound
18611867 * @param marginCategory {Initial, Maintenance}
18621868 * @param isLp if calculating max leveraging for adding lp, need to add buffer
1869+ * @param enterHighLeverageMode can pass this as true to calculate max leverage if the user was to enter high leverage mode
18631870 * @returns : Precision TEN_THOUSAND
18641871 */
18651872 public getMaxLeverageForPerp (
18661873 perpMarketIndex : number ,
18671874 marginCategory : MarginCategory = 'Initial' ,
1868- isLp = false
1875+ isLp = false ,
1876+ enterHighLeverageMode = false
18691877 ) : BN {
18701878 const market = this . driftClient . getPerpMarketAccount ( perpMarketIndex ) ;
18711879 const marketPrice =
@@ -1923,7 +1931,7 @@ export class User {
19231931 maxSize ,
19241932 marginCategory ,
19251933 this . getUserAccount ( ) . maxMarginRatio ,
1926- this . isHighLeverageMode ( )
1934+ enterHighLeverageMode || this . isHighLeverageMode ( )
19271935 ) ;
19281936
19291937 // use more fesible size since imf factor activated
@@ -1945,7 +1953,7 @@ export class User {
19451953 targetSize ,
19461954 marginCategory ,
19471955 this . getUserAccount ( ) . maxMarginRatio ,
1948- this . isHighLeverageMode ( )
1956+ enterHighLeverageMode || this . isHighLeverageMode ( )
19491957 ) ;
19501958 attempts += 1 ;
19511959 }
@@ -2633,7 +2641,8 @@ export class User {
26332641 public getMaxTradeSizeUSDCForPerp (
26342642 targetMarketIndex : number ,
26352643 tradeSide : PositionDirection ,
2636- isLp = false
2644+ isLp = false ,
2645+ enterHighLeverageMode = false
26372646 ) : { tradeSize : BN ; oppositeSideTradeSize : BN } {
26382647 let tradeSize = ZERO ;
26392648 let oppositeSideTradeSize = ZERO ;
@@ -2673,7 +2682,8 @@ export class User {
26732682
26742683 const maxPositionSize = this . getPerpBuyingPower (
26752684 targetMarketIndex ,
2676- lpBuffer
2685+ lpBuffer ,
2686+ enterHighLeverageMode
26772687 ) ;
26782688
26792689 if ( maxPositionSize . gte ( ZERO ) ) {
@@ -3491,12 +3501,17 @@ export class User {
34913501 * @param quoteAmount
34923502 * @returns feeForQuote : Precision QUOTE_PRECISION
34933503 */
3494- public calculateFeeForQuoteAmount ( quoteAmount : BN , marketIndex ?: number ) : BN {
3504+ public calculateFeeForQuoteAmount (
3505+ quoteAmount : BN ,
3506+ marketIndex ?: number ,
3507+ enteringHighLeverageMode ?: boolean
3508+ ) : BN {
34953509 if ( marketIndex !== undefined ) {
34963510 const takerFeeMultiplier = this . driftClient . getMarketFees (
34973511 MarketType . PERP ,
34983512 marketIndex ,
3499- this
3513+ this ,
3514+ enteringHighLeverageMode
35003515 ) . takerFee ;
35013516 const feeAmountNum =
35023517 BigNum . from ( quoteAmount , QUOTE_PRECISION_EXP ) . toNum ( ) *
0 commit comments