49817 sc medium inactive validators are prevented to claim to eligible commission rewards
Description
Summary
Vulnerability Details
1
Step: requestCommissionClaim
function requestCommissionClaim(
uint16 validatorId,
address token
)
external
onlyValidatorAdmin(validatorId)
nonReentrant
_validateValidatorExists(validatorId)
_validateIsToken(token)
{
...
$.pendingCommissionClaims[validatorId][token] = PlumeStakingStorage.PendingCommissionClaim({
amount: amount,
requestTimestamp: nowTs,
token: token,
recipient: recipient
});
$.validatorAccruedCommission[validatorId][token] = 0;
...
}3
Step: finalizeCommissionClaim
function finalizeCommissionClaim(
uint16 validatorId,
address token
) external onlyValidatorAdmin(validatorId) nonReentrant returns (uint256) {
...
uint256 readyTimestamp = claim.requestTimestamp + PlumeStakingStorage.COMMISSION_CLAIM_TIMELOCK;
// First, check if the timelock has passed from the perspective of the current block.
if (block.timestamp < readyTimestamp) {
revert ClaimNotReady(validatorId, token, readyTimestamp);
}
// --- REVISED SLASHING CHECK ---
// If the validator is slashed, the claim is only considered valid if its timelock was
// fully completed BEFORE the slash occurred. This invalidates any pending claims.
if (validator.slashed && readyTimestamp >= validator.slashedAtTimestamp) {
revert ValidatorInactive(validatorId);
}
// For a non-slashed validator, simply require it to be active to finalize a claim.
if (!validator.slashed && !validator.active) {
revert ValidatorInactive(validatorId);
}
...
}Impact
Recommendation
Proof of Concept
Context
1
2
3
4
PoC (test)
Previous50409 sc high validator will lose comissionNext49800 sc insight yield distribution could encounter an unexpected revert
Was this helpful?