Several code quality issues reduce readability and maintainability without directly causing vulnerabilities.
function cancelParticipation() public {
if (block.timestamp >= eventStartDate) {
revert eventStarted();
}
uint256 refundAmount = stakedAsset[msg.sender];
stakedAsset[msg.sender] = 0;
uint256 shares = balanceOf(msg.sender);
_burn(msg.sender, shares);
IERC20(asset()).safeTransfer(msg.sender, refundAmount);
}
// Fix 1: Better naming
-uint256 constant PARTICIPATIONFEEBSPMAX = 300;
+uint256 constant PARTICIPATION_FEE_BPS_MAX = 300;
// Fix 2: Fix typo
-error limiteExceede();
+error LimitExceeded();
- if (_participationFeeBsp > PARTICIPATIONFEEBSPMAX) {
- revert limiteExceede();
+ if (_participationFeeBsp > PARTICIPATION_FEE_BPS_MAX) {
+ revert LimitExceeded();
}
// Fix 3: Remove TODO
-_getWinnerShares(); //TODO : check again !
+_getWinnerShares();
// Fix 4: Consistent error handling
-require(countryIndex < teams.length, "Invalid country index");
+if (countryIndex >= teams.length) {
+ revert invalidCountry();
+}
-require(receiver != address(0));
+if (receiver == address(0)) {
+ revert InvalidReceiver();
+}
// Fix 5: Add zero check
function cancelParticipation() public {
if (block.timestamp >= eventStartDate) {
revert eventStarted();
}
uint256 refundAmount = stakedAsset[msg.sender];
+
+ if (refundAmount == 0) {
+ revert noDeposit();
+ }
stakedAsset[msg.sender] = 0;
uint256 shares = balanceOf(msg.sender);
_burn(msg.sender, shares);
IERC20(asset()).safeTransfer(msg.sender, refundAmount);
+
+ emit ParticipationCancelled(msg.sender, refundAmount);
}
// Fix 6: Add events
+event ParticipationCancelled(address indexed user, uint256 amount);
+event VaultBalanceFinalized(uint256 amount);
function _setFinallizedVaultBalance() internal returns (uint256) {
if (block.timestamp <= eventStartDate) {
revert eventNotStarted();
}
- return finalizedVaultAsset = IERC20(asset()).balanceOf(address(this));
+ finalizedVaultAsset = IERC20(asset()).balanceOf(address(this));
+ emit VaultBalanceFinalized(finalizedVaultAsset);
+ return finalizedVaultAsset;
}
// Fix 7: Use external
-function setCountry(string[48] memory countries) public onlyOwner {
+function setCountry(string[48] calldata countries) external onlyOwner {