15,000 USDC
View results
Submission Details
Severity: gas
Valid

Improve the error being thrown

Summary

This is an informational finding. The error being thrown can add more information to make it clearer.

Code Snippet

https://github.com/Cyfrin/2023-07-foundry-defi-stablecoin/blob/d1c5501aa79320ca0aeaa73f47f0dbc88c7b77e2/src/DSCEngine.sol#L158-L160

Vulnerability Details

The error being thrown can add more information to make it clearer.

Impact

Improving the error being thrown can make things clearer for users or developers.

Tools Used

Manual Review

Recommendations

In file DSCEngine.sol, these can be fixed:

...
error DSCEngine__NotAllowedToken();
- error DSCEngine__TransferFailed();
+ error DSCEngine__TransferFailed(address token);
error DSCEngine__BreaksHealthFactor(uint256 healthFactor);
error DSCEngine__MintFailed();
...
function depositCollateral(address tokenCollateralAddress, uint256 amountCollateral)
public
moreThanZero(amountCollateral)
isAllowedToken(tokenCollateralAddress)
nonReentrant
{
s_collateralDeposited[msg.sender][tokenCollateralAddress] += amountCollateral;
emit CollateralDeposited(msg.sender, tokenCollateralAddress, amountCollateral);
bool success = IERC20(tokenCollateralAddress).transferFrom(msg.sender, address(this), amountCollateral);
if (!success) {
- revert DSCEngine__TransferFailed(); // @audit informational - it is better to put token address or the tx sender: msg.sender in the error message. i.e. DSCEngine__TransferFailed(msg.sender, tokenCollateralAddress);
+ revert DSCEngine__TransferFailed(tokenCollateralAddress); // @audit informational - it is better to put token address or the tx sender: msg.sender in the error message. i.e. DSCEngine__TransferFailed(msg.sender, tokenCollateralAddress);
}
}
function _burnDsc(uint256 amountDscToBurn, address onBehalfOf, address dscFrom) private {
s_DSCMinted[onBehalfOf] -= amountDscToBurn;
bool success = i_dsc.transferFrom(dscFrom, address(this), amountDscToBurn);
// This conditional is hypothtically unreachable
if (!success) {
- revert DSCEngine__TransferFailed();
+ revert DSCEngine__TransferFailed(address(i_dsc));
}
i_dsc.burn(amountDscToBurn);
}
function _redeemCollateral(address from, address to, address tokenCollateralAddress, uint256 amountCollateral)
private
{
s_collateralDeposited[from][tokenCollateralAddress] -= amountCollateral;
emit CollateralRedeemed(from, to, tokenCollateralAddress, amountCollateral);
bool success = IERC20(tokenCollateralAddress).transfer(to, amountCollateral);
if (!success) {
- revert DSCEngine__TransferFailed();
+ revert DSCEngine__TransferFailed(tokenCollateralAddress);
}
}

Support

FAQs

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