20,000 USDC
View results
Submission Details
Severity: low
Valid

Inconsistency of `debt` parameter for `Repaid` event

Summary

The debt parameter for Repaid event denotes how much debt has been repaid excluding interest and fee.

event Repaid(
address indexed borrower,
address indexed lender,
uint256 indexed loanId,
uint256 debt, // @audit - inconsistency
uint256 collateral,
uint256 interestRate,
uint256 startTimestamp
);

There are 4 locations where Repaid event is emitted where debt parameter has different meaning.

loan.debt for Lender.repay(), Lender.refinance()

emit Repaid(
msg.sender,
loan.lender,
loanId,
loan.debt,
loan.collateral,
loan.interestRate,
loan.startTimestamp
);

loan.debt + lenderInterest + protocolInterest for Lender.buyLoan(), Lender.giveLoan()

https://github.com/Cyfrin/2023-07-beedle/blob/main/src/Lender.sol#L409

https://github.com/Cyfrin/2023-07-beedle/blob/main/src/Lender.sol#L511

emit Repaid(
msg.sender,
loan.lender,
loanId,
loan.debt + lenderInterest + protocolInterest, // @audit - inconsistency
loan.collateral,
loan.interestRate,
loan.startTimestamp
);

Tools Used

Manual Review

Recommendations

debt + lenderInterest + protocolInterest should be replaced with debt in Repaid event.

Lender.buyLoan(), Lender.giveLoan()

https://github.com/Cyfrin/2023-07-beedle/blob/main/src/Lender.sol#L409

https://github.com/Cyfrin/2023-07-beedle/blob/main/src/Lender.sol#L511

emit Repaid(
msg.sender,
loan.lender,
loanId,
- loan.debt + lenderInterest + protocolInterest, // @audit - inconsistency
+ loan.debt,
loan.collateral,
loan.interestRate,
loan.startTimestamp
);

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.