51051 sc high inactive validator reward accrual bypass
Description
Brief/Intro
function setRewardRates(
address[] calldata tokens,
uint256[] calldata rewardRates_
) external onlyRole(PlumeRoles.REWARD_MANAGER_ROLE) {
PlumeStakingStorage.Layout storage $ = PlumeStakingStorage.layout();
if (tokens.length == 0) {
revert EmptyArray();
}
if (tokens.length != rewardRates_.length) {
revert ArrayLengthMismatch();
}
uint16[] memory validatorIds = $.validatorIds;
for (uint256 i = 0; i < tokens.length; i++) {
address token_loop = tokens[i];
uint256 rate_loop = rewardRates_[i];
if (!$.isRewardToken[token_loop]) {
revert TokenDoesNotExist(token_loop);
}
uint256 maxRate = $.maxRewardRates[token_loop] > 0
? $.maxRewardRates[token_loop]
: MAX_REWARD_RATE;
if (rate_loop > maxRate) {
revert RewardRateExceedsMax();
}
for (uint256 j = 0; j < validatorIds.length; j++) {
uint16 validatorId_for_crrc = validatorIds[j];
@> PlumeRewardLogic.createRewardRateCheckpoint(
$,
token_loop,
validatorId_for_crrc,
rate_loop
);
}
$.rewardRates[token_loop] = rate_loop;
}
emit RewardRatesSet(tokens, rewardRates_);
}Vulnerability Details
Impact Details
Proof of Concept
1
2
3
4
Previous51296 sc low arctokenpurchase withdrawal breaks view functionsNext50392 sc insight phantom commission burn
Was this helpful?