Skip to content
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: 8 additions & 3 deletions contracts/src/SystemParams.sol
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,6 @@ contract SystemParams is ISystemParams, Initializable {
if (_liquidationParams.liquidationPenaltySP > _liquidationParams.liquidationPenaltyRedistribution) {
revert SPPenaltyGtRedist();
}
if (_liquidationParams.liquidationPenaltyRedistribution > MAX_LIQUIDATION_PENALTY_REDISTRIBUTION) {
revert RedistPenaltyTooHigh();
}

// Validate gas compensation parameters
if (_gasCompParams.collGasCompensationDivisor == 0 || _gasCompParams.collGasCompensationDivisor > 1000) {
Expand All @@ -103,6 +100,14 @@ contract SystemParams is ISystemParams, Initializable {
if (_collateralParams.bcr < 5 * _1pct || _collateralParams.bcr >= 50 * _1pct) revert InvalidBCR();
if (_collateralParams.scr <= _100pct || _collateralParams.scr >= 2 * _100pct) revert InvalidSCR();

// The redistribution penalty must not exceed the overcollateralization buffer (MCR - 100%)
if (
_liquidationParams.liquidationPenaltyRedistribution > MAX_LIQUIDATION_PENALTY_REDISTRIBUTION
|| _liquidationParams.liquidationPenaltyRedistribution > _collateralParams.mcr - _100pct
) {
revert RedistPenaltyTooHigh();
}

// Validate interest parameters
if (_interestParams.minAnnualInterestRate > MAX_ANNUAL_INTEREST_RATE) {
revert MinInterestRateGtMax();
Expand Down
81 changes: 81 additions & 0 deletions contracts/test/systemParams.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,87 @@ contract SystemParamsTest is DevTestSetup {
);
}

function testConstructorRevertsWhenRedistPenaltyExceedsMCRBuffer() public {
// MCR = 110%, so buffer = 10%. Set redistribution penalty to 11% (exceeds buffer)
ISystemParams.LiquidationParams memory liquidationParams = ISystemParams.LiquidationParams({
liquidationPenaltySP: 5e16,
liquidationPenaltyRedistribution: 11 * _1pct // 11% > (110% - 100%)
});

vm.expectRevert(ISystemParams.RedistPenaltyTooHigh.selector);
new SystemParams(false,
_getValidDebtParams(),
liquidationParams,
_getValidGasCompParams(),
_getValidCollateralParams(),
_getValidInterestParams(),
_getValidRedemptionParams(),
_getValidPoolParams()
);
}

function testConstructorAllowsRedistPenaltyEqualToMCRBuffer() public {
// MCR = 110%, so buffer = 10%. Set redistribution penalty to exactly 10%
ISystemParams.LiquidationParams memory liquidationParams = ISystemParams.LiquidationParams({
liquidationPenaltySP: 5e16,
liquidationPenaltyRedistribution: 10 * _1pct // 10% == (110% - 100%)
});

// Should not revert
SystemParams params = new SystemParams(false,
_getValidDebtParams(),
liquidationParams,
_getValidGasCompParams(),
_getValidCollateralParams(),
_getValidInterestParams(),
_getValidRedemptionParams(),
_getValidPoolParams()
);

assertEq(params.LIQUIDATION_PENALTY_REDISTRIBUTION(), 10 * _1pct);
}

function testConstructorRevertsWhenRedistPenaltyExceedsMCRBufferWithDifferentMCR() public {
// MCR = 115%, so buffer = 15%. Set redistribution penalty to 16% (exceeds buffer)
ISystemParams.CollateralParams memory collateralParams = ISystemParams.CollateralParams({
ccr: 150 * _1pct,
scr: 115 * _1pct,
mcr: 115 * _1pct,
bcr: 10 * _1pct
});

ISystemParams.LiquidationParams memory liquidationParams = ISystemParams.LiquidationParams({
liquidationPenaltySP: 5e16,
liquidationPenaltyRedistribution: 16 * _1pct // 16% > (115% - 100%)
});

vm.expectRevert(ISystemParams.RedistPenaltyTooHigh.selector);
new SystemParams(false,
_getValidDebtParams(),
liquidationParams,
_getValidGasCompParams(),
collateralParams,
_getValidInterestParams(),
_getValidRedemptionParams(),
_getValidPoolParams()
);

liquidationParams = ISystemParams.LiquidationParams({
liquidationPenaltySP: 5e16,
liquidationPenaltyRedistribution: 15 * _1pct // 15%
});

new SystemParams(false,
_getValidDebtParams(),
liquidationParams,
_getValidGasCompParams(),
collateralParams,
_getValidInterestParams(),
_getValidRedemptionParams(),
_getValidPoolParams()
);
}

// ========== GAS COMPENSATION VALIDATION TESTS ==========

function testConstructorRevertsWhenGasCompDivisorZero() public {
Expand Down