Skip to content

Commit

Permalink
fix: PR Review
Browse files Browse the repository at this point in the history
  • Loading branch information
deluca-mike committed Apr 19, 2024
1 parent 3657d6a commit f758c97
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 54 deletions.
21 changes: 9 additions & 12 deletions src/MinterGateway.sol
Original file line number Diff line number Diff line change
Expand Up @@ -412,13 +412,13 @@ contract MinterGateway is IMinterGateway, ContinuousIndexing, ERC712Extended {

_imposePenaltyIfMissedCollateralUpdates(minter_);

unchecked {
uint112 principalOfActiveOwedM_ = principalOfActiveOwedMOf(minter_);
uint112 principalOfOwedM_ = principalOfActiveOwedMOf(minter_);

inactiveOwedM_ = _getPresentAmount(principalOfActiveOwedM_);
inactiveOwedM_ = _getPresentAmount(principalOfOwedM_);

unchecked {
// Treat rawOwedM as principal since minter is active.
principalOfTotalActiveOwedM -= principalOfActiveOwedM_;
principalOfTotalActiveOwedM -= principalOfOwedM_;
totalInactiveOwedM += inactiveOwedM_;
}

Expand Down Expand Up @@ -784,12 +784,7 @@ contract MinterGateway is IMinterGateway, ContinuousIndexing, ERC712Extended {

if (penaltyPrincipal_ == 0) return;

emit MissedIntervalsPenaltyImposed(
minter_,
missedIntervals_,
penaltyPrincipal_,
_getPresentAmount(penaltyPrincipal_)
);
emit MissedIntervalsPenaltyImposed(minter_, missedIntervals_, _getPresentAmount(penaltyPrincipal_));
}

/**
Expand Down Expand Up @@ -821,6 +816,8 @@ contract MinterGateway is IMinterGateway, ContinuousIndexing, ERC712Extended {
if (newTimestamp_ <= penalizeFrom_) return;

unchecked {
uint40 timeSpan_ = newTimestamp_ - penalizeFrom_;

uint112 principalOfExcessOwedM_ = principalOfActiveOwedM_ - principalOfMaxAllowedActiveOwedM_;

// NOTE: `newTimestamp_ - penalizeFrom_` will never be larger than `updateCollateralInterval_` since this
Expand All @@ -831,15 +828,15 @@ contract MinterGateway is IMinterGateway, ContinuousIndexing, ERC712Extended {
// Its minimum is capped at `MIN_UPDATE_COLLATERAL_INTERVAL`.
uint112 penaltyPrincipal_ = _imposePenalty(
minter_,
(principalOfExcessOwedM_ * (newTimestamp_ - penalizeFrom_)) / updateCollateralInterval()
(principalOfExcessOwedM_ * timeSpan_) / updateCollateralInterval()
);

if (penaltyPrincipal_ == 0) return;

emit UndercollateralizedPenaltyImposed(
minter_,
_getPresentAmount(principalOfExcessOwedM_),
penaltyPrincipal_,
timeSpan_,
_getPresentAmount(penaltyPrincipal_)
);
}
Expand Down
26 changes: 10 additions & 16 deletions src/interfaces/IMinterGateway.sol
Original file line number Diff line number Diff line change
Expand Up @@ -96,31 +96,25 @@ interface IMinterGateway is IContinuousIndexing, IERC712 {
event MintProposed(uint48 indexed mintId, address indexed minter, uint240 amount, address indexed destination);

/**
* @notice Emitted when penalty is imposed on minter.
* @notice Emitted when a penalty is imposed on `minter` for missed update collateral intervals.
* @param minter The address of the minter.
* @param missedIntervals The number of update intervals missed.
* @param principalAmount The principal amount of penalty charge.
* @param amount The present amount of penalty charge.
* @param penaltyAmount The present amount of penalty charge.
*/
event MissedIntervalsPenaltyImposed(
address indexed minter,
uint40 missedIntervals,
uint112 principalAmount,
uint240 amount
);
event MissedIntervalsPenaltyImposed(address indexed minter, uint40 missedIntervals, uint240 penaltyAmount);

/**
* @notice Emitted when penalty is imposed on minter.
* @param minter The address of the minter.
* @param excessOwedM The present amount of owed M in excess of allowed owed M.
* @param principalAmount The principal amount of penalty charge.
* @param amount The present amount of penalty charge.
* @notice Emitted when a penalty is imposed on `minter` for undercollateralization.
* @param minter The address of the minter.
* @param excessOwedM The present amount of owed M in excess of allowed owed M.
* @param timeSpan The span of time over which the undercollateralization penalty was applied.
* @param penaltyAmount The present amount of penalty charge.
*/
event UndercollateralizedPenaltyImposed(
address indexed minter,
uint240 excessOwedM,
uint112 principalAmount,
uint240 amount
uint40 timeSpan,
uint240 penaltyAmount
);

/**
Expand Down
32 changes: 6 additions & 26 deletions test/MinterGateway.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -1253,12 +1253,7 @@ contract MinterGatewayTests is TestUtils {
);

vm.expectEmit();
emit IMinterGateway.MissedIntervalsPenaltyImposed(
_minter1,
3,
_minterGateway.getPrincipalAmountRoundedUp(penalty),
penalty
);
emit IMinterGateway.MissedIntervalsPenaltyImposed(_minter1, 3, penalty);

vm.prank(_minter1);
_minterGateway.updateCollateral(collateral, retrievalIds, bytes32(0), validators, timestamps, signatures);
Expand Down Expand Up @@ -1412,7 +1407,7 @@ contract MinterGatewayTests is TestUtils {
emit IMinterGateway.UndercollateralizedPenaltyImposed(
_minter1,
uint240(excessOwedM) + 1,
_minterGateway.getPrincipalAmountRoundedDown(penalty),
_updateCollateralInterval - 1,
penalty
);

Expand Down Expand Up @@ -1541,18 +1536,13 @@ contract MinterGatewayTests is TestUtils {
uint240 undercollateralizedPenalty = ((activeOwedM + missedUpdatePenalty) * _penaltyRate) / (2 * ONE);

vm.expectEmit();
emit IMinterGateway.MissedIntervalsPenaltyImposed(
_minter1,
2,
_minterGateway.getPrincipalAmountRoundedUp(missedUpdatePenalty),
missedUpdatePenalty
);
emit IMinterGateway.MissedIntervalsPenaltyImposed(_minter1, 2, missedUpdatePenalty);

vm.expectEmit();
emit IMinterGateway.UndercollateralizedPenaltyImposed(
_minter1,
activeOwedM + missedUpdatePenalty,
_minterGateway.getPrincipalAmountRoundedUp(undercollateralizedPenalty),
_updateCollateralInterval / 2,
undercollateralizedPenalty
);

Expand Down Expand Up @@ -1700,12 +1690,7 @@ contract MinterGatewayTests is TestUtils {
assertEq(_minterGateway.getPenaltyForMissedCollateralUpdates(_minter1), penalty);

vm.expectEmit();
emit IMinterGateway.MissedIntervalsPenaltyImposed(
_minter1,
3,
_minterGateway.getPrincipalAmountRoundedUp(penalty),
penalty
);
emit IMinterGateway.MissedIntervalsPenaltyImposed(_minter1, 3, penalty);

vm.prank(_alice);
_minterGateway.burnM(_minter1, activeOwedM);
Expand Down Expand Up @@ -2144,12 +2129,7 @@ contract MinterGatewayTests is TestUtils {
uint240 penalty_ = (activeOwedM * _penaltyRate) / ONE;

vm.expectEmit();
emit IMinterGateway.MissedIntervalsPenaltyImposed(
_minter1,
1,
_minterGateway.getPrincipalAmountRoundedUp(penalty_),
penalty_
);
emit IMinterGateway.MissedIntervalsPenaltyImposed(_minter1, 1, penalty_);

vm.expectEmit();
emit IMinterGateway.MinterDeactivated(_minter1, activeOwedM + penalty_, _alice);
Expand Down

0 comments on commit f758c97

Please sign in to comment.