DiffusalLiquidationCalculator
Liquidation view functions extracted from LiquidationEngine
The DiffusalLiquidationCalculator contract provides liquidation-related view functions for the Diffusal protocol. It was extracted from DiffusalLiquidationEngine to reduce contract size while maintaining the same functionality.
Overview
The liquidation calculator provides:
| Function | Description |
|---|---|
| Liquidation Info | Comprehensive data about a user's liquidation status |
| Liquidatable Portfolios | Find all portfolios that can be liquidated for a user |
| Debt Estimation | Calculate debt and estimated costs/bounties |
Architecture
┌─────────────────────────────────────────────────────────────────┐
│ DiffusalLiquidationCalculator │
│ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ getPortfolioLiquidationInfo() - per-portfolio data │ │
│ └───────────────────────────────────────────────────────────┘ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ getLiquidatablePortfolios() - find all liquidatable │ │
│ └───────────────────────────────────────────────────────────┘ │
└──────────────────────────────┬──────────────────────────────────┘
│
│ reads from
▼
┌─────────────────────────────────────────────────────────────────┐
│ DiffusalLiquidationEngine │
│ (main liquidation logic) │
└─────────────────────────────────────────────────────────────────┘View Functions
Portfolio-Aware Only
All liquidation view functions are portfolio-aware. You must always specify a
portfolioId. Use getLiquidatablePortfolios() to find which portfolios need
liquidation.
getPortfolioLiquidationInfo
Get comprehensive liquidation information for a specific portfolio.
function getPortfolioLiquidationInfo(address user, uint256 portfolioId)
external view returns (LiquidationInfo memory info)| Parameter | Type | Description |
|---|---|---|
user | address | User address |
portfolioId | uint256 | Portfolio ID |
Returns:
struct LiquidationInfo {
bool isLiquidatable; // Can be liquidated
uint256 debt; // Debt amount (USDC, 6 decimals)
uint256 estimatedLongsCost; // Estimated cost for long positions (USDC)
uint256 estimatedShortsCost; // Estimated proceeds from short positions (USDC)
uint256 estimatedBounty; // Estimated liquidator reward (USDC)
uint256 positionCount; // Number of positions
uint256 portfolioId; // Portfolio ID
}getLiquidatablePortfolios
Get all liquidatable portfolio IDs for a user.
function getLiquidatablePortfolios(address user) external view returns (uint256[] memory portfolioIds)| Parameter | Type | Description |
|---|---|---|
user | address | User address to check |
Returns: Array of portfolio IDs that are liquidatable. Empty array if none.
Use case: Liquidator bots can call this to find all portfolios needing liquidation for a user.
liquidationEngine
Get the liquidation engine address.
function liquidationEngine() external view returns (address)marginCalculator
Get the margin calculator address.
function marginCalculator() external view returns (address)Integration Points
Depends On
| Contract | Purpose |
|---|---|
| DiffusalLiquidationEngine | Main liquidation logic |
| DiffusalMarginCalculator | Liquidatable checks |
Used By
| Contract | Purpose |
|---|---|
| Liquidator bots | Pre-liquidation checks |
| Frontend | Display liquidation status |
Example Usage
import {IDiffusalLiquidationCalculator} from "@diffusal/interfaces/IDiffusalLiquidationCalculator.sol";
import {IDiffusalLiquidationEngine} from "@diffusal/interfaces/IDiffusalLiquidationEngine.sol";
// Check if user has any liquidatable portfolios
uint256[] memory liquidatableIds = liquidationCalculator.getLiquidatablePortfolios(user);
if (liquidatableIds.length > 0) {
// Get detailed info for the first liquidatable portfolio
IDiffusalLiquidationEngine.LiquidationInfo memory info =
liquidationCalculator.getPortfolioLiquidationInfo(user, liquidatableIds[0]);
// Estimate profitability
uint256 estimatedProfit = info.estimatedBounty;
uint256 estimatedCost = info.estimatedLongsCost;
if (estimatedProfit > estimatedCost) {
// Proceed with liquidation
}
}Code Reference
Source: packages/contracts/src/DiffusalLiquidationCalculator.sol
Interface: packages/contracts/src/interfaces/IDiffusalLiquidationCalculator.sol
Related
- Liquidation — High-level liquidation mechanics
- DiffusalLiquidationEngine — Main liquidation contract
- DiffusalLiquidationSettlement — Collateral settlement