Skip to main content
The margin calculation utilities provide functions for determining margin requirements, calculating collateral values, and computing liquidation prices for positions.

Margin Weight Functions

calculateSizePremiumLiabilityWeight

Calculates the size-adjusted liability weight for a position.
BN
required
Position size in AMM_RESERVE_PRECISION
BN
required
Initial margin fraction factor
BN
required
Base liability weight
BN
required
Precision to use for calculations
boolean
default:"true"
Whether to bound the result to the base liability weight
BN
Size-adjusted liability weight

Usage Example

calculateSizeDiscountAssetWeight

Calculates the size-adjusted asset weight for a position.
BN
required
Position size in AMM_RESERVE_PRECISION
BN
required
Initial margin fraction factor
BN
required
Base asset weight
BN
Size-adjusted asset weight (minimum of base weight and calculated discount weight)

Oracle Price Functions

calculateOraclePriceForPerpMargin

Calculates the oracle price adjusted for margin calculations with spread and confidence intervals.
PerpPosition
required
The perpetual position
PerpMarketAccount
required
The perpetual market account
OraclePriceData
required
Oracle price data including confidence interval
BN
Adjusted oracle price for margin calculations

Usage Example

Base Asset Value Functions

calculateBaseAssetValueWithOracle

Calculates the base asset value using oracle price. For prediction markets, this differs from liability value.
PerpMarketAccount
required
The perpetual market account
PerpPosition
required
The perpetual position
Pick<OraclePriceData, 'price'>
required
Oracle price data
boolean
default:"false"
Whether to include open orders in calculation
BN
Base asset value in quote precision

Usage Example

calculateWorstCaseBaseAssetAmount

Calculates the worst-case base asset amount including open orders.
PerpPosition
required
The perpetual position
PerpMarketAccount
required
The perpetual market account
BN
required
Oracle price
BN
Worst-case base asset amount

calculateWorstCasePerpLiabilityValue

Calculates the worst-case liability value for a position.
PerpPosition
required
The perpetual position
PerpMarketAccount
required
The perpetual market account
BN
required
Oracle price
boolean
default:"true"
Whether to include open orders
{ worstCaseBaseAssetAmount: BN; worstCaseLiabilityValue: BN }
Object containing worst-case base asset amount and liability value

calculatePerpLiabilityValue

Calculates the liability value for a given base asset amount.
BN
required
Base asset amount
BN
required
Oracle price
boolean
required
Whether this is a prediction market
BN
Liability value. For prediction markets, shorts use (1 - price) * base

Margin Requirement Functions

calculateMarginUSDCRequiredForTrade

Calculates the margin required to open a trade in USDC.
DriftClient
required
The Drift client instance
number
required
Market index for the trade
BN
required
Size of the trade
number
User’s maximum margin ratio
boolean
Whether user is in high leverage mode
BN
Expected entry price (uses oracle price if not provided)
BN
Margin required in USDC

Usage Example

calculateCollateralDepositRequiredForTrade

Calculates the collateral deposit required for a trade in a specific collateral asset.
DriftClient
required
The Drift client instance
number
required
Market index for the trade
BN
required
Size of the trade
number
required
Spot market index for the collateral asset
number
User’s maximum margin ratio
boolean
Whether user is in high leverage mode
BN
Estimated entry price
BN
Collateral required in the precision of the target collateral market

calculateCollateralValueOfDeposit

Calculates the collateral value of a deposit.
DriftClient
required
The Drift client instance
number
required
Spot market index for the collateral
BN
required
Amount to deposit in base units
BN
Collateral value in QUOTE_PRECISION

Liquidation Price Functions

calculateLiquidationPrice

Calculates the liquidation price for a position.
BN
required
Current free collateral
BN
required
Change in free collateral per price change
BN
required
Current oracle price
BN
Liquidation price. Returns -1 if calculated price is negative

Usage Example

User Position Functions

calculateUserMaxPerpOrderSize

Calculates the maximum order size a user can place.
DriftClient
required
The Drift client instance
PublicKey
required
User account public key
UserAccount
required
User account data
number
required
Market index for the trade
PositionDirection
required
Direction of the trade (LONG or SHORT)
{ tradeSize: BN; oppositeSideTradeSize: BN }
Object containing max trade size for requested side and opposite side

calcHighLeverageModeInitialMarginRatioFromSize

Calculates the initial margin ratio for high leverage mode based on position size.
BN
required
Margin ratio before size adjustment
BN
required
Size-adjusted margin ratio
BN
required
Default margin ratio for the market
BN
Calculated initial margin ratio for high leverage mode