Manipulação de Recompensas (Reward Manipulation)
contract RewardPool {
mapping(address => uint) public stakedAmount;
mapping(address => uint) public rewardDebt;
uint public totalStaked;
uint public rewardRate;
function stake(uint _amount) external {
// Actualiza las recompensas pendientes antes de cambiar el estado
updateRewards(msg.sender);
stakedAmount[msg.sender] += _amount;
totalStaked += _amount;
}
function withdraw(uint _amount) external {
updateRewards(msg.sender);
stakedAmount[msg.sender] -= _amount;
totalStaked -= _amount;
}
function updateRewards(address _user) internal {
uint pendingReward = stakedAmount[_user] * rewardRate;
rewardDebt[_user] += pendingReward;
}
function claimRewards() external {
updateRewards(msg.sender);
uint reward = rewardDebt[msg.sender];
rewardDebt[msg.sender] = 0;
// Lógica para transferir la recompensa al usuario
}
}PreviousFalta de Controle de Acesso (Missing Access Control)NextFalha na Inicialização (Failure to Initialize)
Last updated