Short Pool Integration

1. Contract Interface

interface IShortPoolManager {
    /**
     * @notice Rebalance positions in a specific tick
     * @param pool The address of short pool
     * @param receiver The address to receive fxUSD
     * @param tick The tick to rebalance
     * @param maxRawDebts Maximum raw debt tokens to use
     */
    function rebalance(
        address pool,
        address receiver,
        int16 tick,
        uint256 maxRawDebts
    ) external returns (uint256 colls, uint256 debts);

    /**
     * @notice Rebalance entire pool
     * @param pool The address of short pool
     * @param receiver The address to receive fxUSD
     * @param maxRawDebts Maximum raw debt tokens to use
     */
    function rebalance(
        address pool,
        address receiver,
        uint256 maxRawDebts
    ) external returns (uint256 colls, uint256 debts);

    /**
     * @notice Liquidate high-risk short positions
     * @param pool The address of short pool
     * @param receiver The address to receive fxUSD
     * @param maxRawDebts Maximum raw debt tokens to use
     */
    function liquidate(
        address pool,
        address receiver,
        uint256 maxRawDebts
    ) external returns (uint256 colls, uint256 debts);
}

2. Short Pool Specifics

Key Differences from Long Pool:

  1. Collateral: fxUSD tokens

  2. Debt: External tokens (ETH, BTC, etc.)

Rebalance Example:

// Get debt token for the short pool
address debtToken = IShortPool(shortPoolAddress).debtToken();

// Approve debt tokens for rebalancing
IERC20(debtToken).approve(shortPoolManager, maxDebtAmount);

// Execute rebalance
(uint256 fxUSDReceived, uint256 debtUsed) = 
    IShortPoolManager(shortPoolManager).rebalance(
        shortPoolAddress,    // target short pool
        msg.sender,          // receive fxUSD
        maxDebtAmount        // max debt tokens to use
    );

Last updated