Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

doc: readme parameter restriction #82

Merged
merged 3 commits into from
Oct 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,17 @@ The two main use-cases are:
1. Using normal fixed parameters when `preLIF1 = preLIF2` and `preLCF1 = preLCF2`.
2. Using health dependent liquidation when either `preLIF1 < preLIF2` or `preLCF1 < preLCF2`, similar to a Quasi Dutch Auction (as in [Euler liquidations](https://docs-v1.euler.finance/getting-started/white-paper#liquidations)).


### Pre-liquidation parameters restrictions

The PreLiquidation smart-contract enforces the following properties:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would remove "following" as the properties are listed in the same sentence. Should you list them separately (e.g. by labeling with them names or ids out of a sentence) then using following would apply as the sentence is not self contained.

Suggested change
The PreLiquidation smart-contract enforces the following properties:
The PreLiquidation smart-contract enforces the properties:

- preLltv < LLTV;
- preLCF1 <= preLCF2;
- preLFC1 <= 1;
- 1 <= preLIF1 <= preLIF2 <= 1 / LLTV.
Note: Using `preLCF2 > 1`, you can select at which LTV between preLltv and LLTV the entire position will be pre-liquidated.
Copy link
Contributor

@QGarchery QGarchery Oct 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Note: Using `preLCF2 > 1`, you can select at which LTV between preLltv and LLTV the entire position will be pre-liquidated.
Note: Using `preLCF2 > 1`, one can select a LTV smaller than LLTV after which the position can be fully pre-liquidated.

A pre-liquidation close factor higher than 100% means that the whole position is pre-liquidatable.

### `onPreLiquidate` callback

By calling `preLiquidate` with a smart contract that implements the `IPreLiquidationCallback` interface, the liquidator can be called back.
Expand Down
2 changes: 2 additions & 0 deletions src/PreLiquidation.sol
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,14 @@ contract PreLiquidation is IPreLiquidation, IMorphoRepayCallback {
/// @dev The following requirements should be met:
/// - preLltv < LLTV;
/// - preLCF1 <= preLCF2;
/// - preLCF1 <= 1
/// - 1 <= preLIF1 <= preLIF2 <= 1 / LLTV.
constructor(address morpho, Id id, PreLiquidationParams memory _preLiquidationParams) {
require(IMorpho(morpho).market(id).lastUpdate != 0, ErrorsLib.NonexistentMarket());
MarketParams memory _marketParams = IMorpho(morpho).idToMarketParams(id);
require(_preLiquidationParams.preLltv < _marketParams.lltv, ErrorsLib.PreLltvTooHigh());
require(_preLiquidationParams.preLCF1 <= _preLiquidationParams.preLCF2, ErrorsLib.PreLCFDecreasing());
require(_preLiquidationParams.preLCF1 <= WAD, ErrorsLib.PreLCFTooHigh());
require(WAD <= _preLiquidationParams.preLIF1, ErrorsLib.PreLIFTooLow());
require(_preLiquidationParams.preLIF1 <= _preLiquidationParams.preLIF2, ErrorsLib.PreLIFDecreasing());
require(_preLiquidationParams.preLIF2 <= WAD.wDivDown(_marketParams.lltv), ErrorsLib.PreLIFTooHigh());
Expand Down
2 changes: 2 additions & 0 deletions src/libraries/ErrorsLib.sol
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ library ErrorsLib {

error PreLCFDecreasing();

error PreLCFTooHigh();

error PreLIFTooLow();

error PreLIFDecreasing();
Expand Down
18 changes: 17 additions & 1 deletion test/PreLiquidationErrorTest.sol
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ contract PreLiquidationErrorTest is BaseTest {
factory.createPreLiquidation(id, preLiquidationParams);
}

function testCloseFactorDecreasing(PreLiquidationParams memory preLiquidationParams) public virtual {
function testLCFDecreasing(PreLiquidationParams memory preLiquidationParams) public virtual {
preLiquidationParams = boundPreLiquidationParameters({
preLiquidationParams: preLiquidationParams,
minPreLltv: WAD / 100,
Expand All @@ -57,6 +57,22 @@ contract PreLiquidationErrorTest is BaseTest {
factory.createPreLiquidation(id, preLiquidationParams);
}

function testLCFHigh(PreLiquidationParams memory preLiquidationParams) public virtual {
preLiquidationParams = boundPreLiquidationParameters({
preLiquidationParams: preLiquidationParams,
minPreLltv: WAD / 100,
maxPreLltv: marketParams.lltv - 1,
minPreLCF: WAD + 1,
maxPreLCF: type(uint256).max,
minPreLIF: WAD + 1,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
minPreLIF: WAD + 1,
minPreLIF: WAD,

maxPreLIF: WAD.wDivDown(lltv),
preLiqOracle: marketParams.oracle
});

vm.expectRevert(ErrorsLib.PreLCFTooHigh.selector);
factory.createPreLiquidation(id, preLiquidationParams);
}

function testLowPreLIF(PreLiquidationParams memory preLiquidationParams) public virtual {
preLiquidationParams = boundPreLiquidationParameters({
preLiquidationParams: preLiquidationParams,
Expand Down