Liquidations
Liquidation Conditions
Liquidation Triggers
Liquidation Validation
function _validateLiquidation(
address account,
bytes32 assetId,
bool isLong,
bool raise
) private view returns (uint256, uint256) {
Position memory position = positionManager.getPosition(account, assetId, isLong);
(bool hasProfit, uint256 delta) = getDelta(assetId, position.size, position.entryPrice, isLong, position.lastIncreasedTime);
uint256 marginFees = _getFundingFee(assetId, position.size, position.entryFundingRate);
marginFees += (position.size * marginFeeBasisPoints[assetId]) / BASIS_POINTS;
// Check if losses exceed collateral
if (!hasProfit && position.collateral < delta) {
return (1, marginFees); // Liquidation state 1: Full liquidation
}
uint256 remainingCollateral = position.collateral;
if (!hasProfit) {
remainingCollateral = position.collateral - delta;
}
// Check if fees exceed remaining collateral
if (remainingCollateral < marginFees + liquidationFeeUsd[assetId]) {
return (1, marginFees); // Liquidation state 1: Full liquidation
}
// Check leverage limit
if (remainingCollateral * maxLeverage[assetId] < position.size * BASIS_POINTS) {
return (2, marginFees); // Liquidation state 2: Partial liquidation
}
return (0, marginFees); // Healthy position
}Liquidation Types
Full Liquidation (State 1)
Partial Liquidation (State 2)
Liquidation Process
Liquidation Pricing
Mark Price Calculation
Liquidation Price Formula
Liquidation Fees
Fee Structure
Component
Amount
Recipient
Fee Calculation
Liquidation Monitoring
Position Health Monitoring
Liquidation Alerts
Liquidation Protection
Auto-Deleveraging
Stop-Loss Orders
Liquidation Bots
Liquidator Implementation
Liquidation Monitoring
Risk Management
Liquidation Prevention
Protocol Protection
Last updated