😠General Considerations for ERC777 Reentrancy Vulnerabilities
Vulnerability: Reentrancy in ERC777 Transfers
Example of a Vulnerable Function
function claimRewards(address user, IERC20[] memory _rewardTokens) external {
for (uint8 i = 0; i < _rewardTokens.length; i++) {
uint256 rewardAmount = accruedRewards[user][_rewardTokens[i]];
// Check for zero rewards
if (rewardAmount == 0) revert("Zero rewards");
// Vulnerability: Transferring rewards before clearing accruedRewards
_rewardTokens[i].transfer(user, rewardAmount);
// Clear the user's rewards after the transfer (Too late! Vulnerable to reentrancy)
accruedRewards[user][_rewardTokens[i]] = 0;
emit RewardsClaimed(user, _rewardTokens[i], rewardAmount);
}
} PreviousRugability of a Poorly Implemented recoverERC20 Function in Staking ContractsNextVulnerability: _lpToken and Reward Token Confusion in Staking Contracts
Last updated