The delegateBoost function's per-recipient validation allows users to delegate cumulative boost amounts exceeding their actual veToken balance. This enables artificial inflation of voting power and reward eligibility across multiple pools simultaneously, distorting protocol economics.
The issue stems from the delegation tracking mechanism in the delegateBoost function, which fails to account for existing active delegations when validating new ones. The critical code section shows:
The validation logic checks only the individual delegation amount against the user's current veToken balance, ignoring existing delegations stored in the nested mapping structure mapping(address => mapping(address => UserBoost)). This allows multiple delegations to different recipients that cumulatively exceed the user's actual holdings.
The root cause manifests through three key flaws:
Per-recipient delegation tracking instead of global accounting
Missing sum check of all active delegations against veToken balance
Storage structure enabling duplicate delegations to different pools
As shown in the mapping declaration:
A user can create multiple delegations to different pools, each validated in isolation. The contract's design comment "Manages boost delegations" implies proper accounting that this implementation fails to deliver.
Attackers can multiply their effective voting power and reward eligibility beyond their actual token holdings, enabling theft of rewards from legitimate participants and manipulation of governance outcomes. The inflation affects all pools accepting delegated boosts, creating protocol-wide economic distortions.
Alice holds 100 veTokens
Delegates 100 to PoolA via delegateBoost(poolA, 100, 7 days) - passes balance check
Delegates 100 to PoolB via delegateBoost(poolB, 100, 7 days) - passes balance check
Both pools process 100 boost despite total 200 delegated
BaseGauge.calculateRewards() uses inflated boost values for both pools
Alice claims rewards in both pools using 2x leverage
Add this test file to BoostController.test.js on Delegation system part
run this through
Implement global delegation tracking with cumulative validation to ensure total delegated amounts never exceed veToken holdings.
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.