Types
LiquidationAndPnlInfo
Combined liquidation price and unrealized PnL information.
MarginRequirementInfo
Margin requirement information for a user.
CollateralInfo
Collateral information for a user.
Liquidation Price Functions
calculate_liquidation_price_and_unrealized_pnl
Calculate both liquidation price and unrealized PnL for a perp position.
client- Reference to the DriftClientuser- The user accountmarket_index- The perp market index
calculate_liquidation_price
Calculate the liquidation price for a perp position.
client- Reference to the DriftClientuser- The user accountmarket_index- The perp market index
- Returns -1 if position cannot be liquidated
- Takes into account all user positions across markets
- Considers matching spot positions (e.g., SOL-PERP + SOL spot)
- Price at which free collateral becomes zero
calculate_liquidation_price_inner
Internal function to calculate liquidation price with full control.
user- The user accountperp_market- The perp market configurationspot_market- Optional matching spot market (for hedging)oracle_price- Current oracle priceaccounts- All necessary account data
Unrealized PnL Functions
calculate_unrealized_pnl
Calculate unrealized PnL for a perp position.
client- Reference to the DriftClientuser- The user accountmarket_index- The perp market index
- Positive values indicate profit
- Negative values indicate loss
calculate_unrealized_pnl_inner
Calculate unrealized PnL given position and oracle price.
Margin Requirement Functions
calculate_margin_requirements
Calculate both initial and maintenance margin requirements.
client- Reference to the DriftClientuser- The user account
Collateral Functions
calculate_collateral
Calculate total and free collateral for a user.
client- Reference to the DriftClientuser- The user accountmargin_requirement_type- Initial or Maintenance
Helper Functions
calculate_perp_free_collateral_delta
Calculate how perp position free collateral changes with price.
calculate_spot_free_collateral_delta
Calculate how spot position free collateral changes with price.
calculate_max_pct_to_liquidate
Calculate the maximum percentage of a position that can be liquidated.
user- The user accountmargin_shortage- Current margin shortage amountslot- Current blockchain slotinitial_pct_to_liquidate- Initial liquidation percentage allowedliquidation_duration- Number of slots over which to scale up liquidation
- Percentage increases linearly over time since user’s last activity
- Allows for graceful liquidations that scale with severity
- Small margin shortages (< $50) are liquidated immediately