Skip to main content

IDelayedLiquidationGate

Git Source - Generated with forge doc

Title: IDelayedLiquidationGate

Interface of the combined ILiquidatorGate and liquidation router enforcing a grace period before liquidations.

Functions

MORPHO_MIDNIGHT

The Morpho Midnight protocol this gate is bound to.

function MORPHO_MIDNIGHT() external view returns (IMidnight);

GRACE_PERIOD

The seconds between startGracePeriod and the earliest liquidation.

function GRACE_PERIOD() external view returns (uint256);

LIQUIDATION_PERIOD

The seconds during which liquidation is permitted, starting GRACE_PERIOD after the window opened. After this period elapses without liquidation, the window expires.

function LIQUIDATION_PERIOD() external view returns (uint256);

PRIORITY_PERIOD

The seconds at the start of the liquidation window during which only the priorityLiquidator recorded at startGracePeriod time may liquidate. Once elapsed, or if it is address(0), any address may liquidate.

function PRIORITY_PERIOD() external view returns (uint256);

gracePeriodInfo

Returns the last recorded grace period entry of (borrower, marketId). Entries are never cleared, so expired or consumed windows return stale data.

function gracePeriodInfo(address borrower, bytes32 marketId)
external
view
returns (uint56 timestamp, address priorityLiquidator);

startGracePeriod

Opens the grace window on an unhealthy position.

Reverts if a window is already open.

Reverts if the position is still healthy at call time.

Reverts if the position's liquidation is locked on Midnight.

function startGracePeriod(bytes32 marketId, address borrower, address _priorityLiquidator) external;

Parameters

NameTypeDescription
marketIdbytes32The market in distress.
borroweraddressThe borrower being liquidated.
_priorityLiquidatoraddressThe address with exclusive liquidation rights during the priority sub-window.

liquidate

Liquidates a position whose grace window has elapsed.

Pre-maturity, reverts if no grace window has been opened, before GRACE_PERIOD elapses, after the window expires, or during the priority sub-window when called by a non-priority address.

Past market.maturity, the window checks are skipped and liquidation via this gate is permissionless.

function liquidate(
Market calldata market,
uint256 collateralIndex,
uint256 seizedAssets,
uint256 repaidUnits,
address borrower,
bool postMaturityMode,
address receiver,
address callback,
bytes calldata data
) external returns (uint256, uint256);

Parameters

NameTypeDescription
marketMarket
collateralIndexuint256
seizedAssetsuint256
repaidUnitsuint256
borroweraddress
postMaturityModeboolSelects the Midnight liquidation mode: true = post-maturity mode (requires block.timestamp > market.maturity; LIF ramps from 1 to maxLif over TIME_TO_MAX_LIF; RCF disabled), false = normal mode (requires originalDebt > maxDebt; LIF = maxLif; RCF applies). See IMidnight.liquidate.
receiveraddressThe address receiving the seized collateral, forwarded to Midnight.
callbackaddressOptional flash-liquidation callback. Must be zero or the caller; when nonzero, must implement ILiquidateCallback.onLiquidate.
databytesArbitrary data forwarded to the callback's onLiquidate.

Events

GracePeriodStarted

event GracePeriodStarted(
address indexed borrower, bytes32 indexed marketId, uint256 timestamp, address priorityLiquidator
);

Errors

GracePeriodAlreadyActive

error GracePeriodAlreadyActive();

PositionIsHealthy

error PositionIsHealthy();

PositionLocked

error PositionLocked();

NotMorpho

error NotMorpho();

LiquidationNotAllowed

error LiquidationNotAllowed();

InvalidCallback

error InvalidCallback();

Structs

GracePeriodInfo

Packed into a single storage slot: uint56 (7 bytes) + address (20 bytes) = 27 bytes.

struct GracePeriodInfo {
uint56 timestamp;
address priorityLiquidator;
}