In the BoostController contract its boost delegation mechanism where expired delegations remain active until manually revoked by delegation recipients. This design oversight allows inactive boosts to perpetually influence pool metrics, resulting in inaccurate reward calculations and potential unfair advantage in reward distribution.
Passive Expiration Handling:
Delegated boosts (via delegateBoost()) persist indefinitely after expiration until recipients actively call removeBoostDelegation().
The updateUserBoost() function recalculates user boosts without checking delegation expiration status, leaving stale delegations active.
State Corruption in Pool Metrics:
Expired delegations continue to inflate poolBoosts[pool].totalBoost and poolBoosts[pool].workingSupply values.
These corrupted metrics are used in reward calculations, creating systemic inaccuracies.
When delegations expire (block.timestamp >= delegation.expiry), no automatic mechanisms adjust pool totals.The removeBoostDelegation() function is permissioned to delegation recipients, creating reliance on third-party actions. critical state-updating functions (updateUserBoost(), getWorkingBalance()) fail to validate delegation expiration status during routine operations.
Stale boosts artificially increase pool metrics, enabling unfair reward claims.
Manual Review
Add expiration timestamp validation in all boost calculation entry points
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.