Skip to content

Commit f66cc8c

Browse files
committed
fix: simplify interest reset in deductFixedPositionDebt during liquidation
Remove partial interest tracking logic and always reset interestRepaid and lastRepaidTime after liquidation deduction.
1 parent 7f72aec commit f66cc8c

1 file changed

Lines changed: 4 additions & 21 deletions

File tree

src/broker/libraries/BrokerMath.sol

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -546,27 +546,10 @@ library BrokerMath {
546546
// update repaid principal amount
547547
principalToDeduct -= repayPrincipalAmt;
548548
p.principalRepaid += repayPrincipalAmt;
549-
550-
if (repayInterestAmt >= accruedInterest) {
551-
// all accrued interest fully covered -> safe to reset tracking
552-
p.interestRepaid = 0;
553-
p.lastRepaidTime = block.timestamp;
554-
} else {
555-
// partial interest covered -> adjust interestRepaid to preserve outstanding
556-
// After principalRepaid increased, getAccruedInterestForFixedPosition() recalculates
557-
// with smaller (principal - principalRepaid), producing a lower total (newTotalAccrued).
558-
// We set interestRepaid so that: newTotalAccrued - interestRepaid = unpaidInterest
559-
uint256 unpaidInterest = accruedInterest - repayInterestAmt;
560-
uint256 newTotalAccrued = getAccruedInterestForFixedPosition(p);
561-
if (newTotalAccrued >= unpaidInterest) {
562-
// exact: outstanding is perfectly preserved
563-
p.interestRepaid = newTotalAccrued - unpaidInterest;
564-
} else {
565-
// edge case: most principal repaid, formula can't represent full outstanding
566-
// preserve maximum possible: outstanding = newTotalAccrued (don't reset lastRepaidTime)
567-
p.interestRepaid = 0;
568-
}
569-
}
549+
// reset repaid interest to zero (all accrued interest has been cleared)
550+
p.interestRepaid = 0;
551+
// reset repaid time to now
552+
p.lastRepaidTime = block.timestamp;
570553
}
571554

572555
return (interestToDeduct, principalToDeduct, p);

0 commit comments

Comments
 (0)