The boost multiplier in BoostController can exceed the MAX_BOOST limit of 2.5x, and this breaks core protocol economics by allowing users to receive higher rewards than intended. The BoostController calculates reward multipliers for users based on their veToken holdings. When a user's boost multiplier is calculated, the contract fails to properly enforce the MAX_BOOST limit of 25000 (2.5x). This creates a situation where users could receive amplified rewards beyond protocol design. his is like a loyalty program giving 500% cashback when the max should be 250% - it breaks core economic assumptions.
The assumption is the BoostCalculator library would naturally cap values, but the interaction between voting power calculations and boost multipliers created an edge case where values could exceed limits.
The BoostController acts as the heart of RAAC's reward system, carefully balancing incentives for long-term holders. Think of it like a loyalty program where holding veRAACTokens lets you earn enhanced rewards - up to 2.5x more than base rates. /BoostController.sol#calculateBoost()
The vulnerability emerges in the boost calculation logic. When a user with significant veToken holdings interacts with the system, the BoostCalculator can return multipliers exceeding the intended 2.5x cap (25000 basis points). This is similar to a credit card accidentally giving unlimited cashback instead of the advertised maximum.
Here's how it happens. A user deposits a large amount of tokens into
veRAACToken. When they interact with a gauge or pool, theBoostControllercalculates their multiplier. The calculation considers their voting power relative to total supply, but crucially lacks a final boundary check againstMAX_BOOST.
The impact ripples through the entire protocol. Gauges distribute excessive rewards, breaking carefully designed emission schedules. Pools apply multipliers beyond economic models. Most critically, this undermines RAAC's core mission of sustainable real estate tokenization by distorting reward mechanisms.
Allows users to receive higher rewards than intended by the protocol design. The economic model assumes a maximum 2.5x boost, but users could potentially get higher multipliers. Here's what makes this finding fascinating: /BoostController.sol#L39-L42
The vulnerability exists in both calculateBoost() and _updateGaugeWeight(), but the core fix should be implemented in calculateBoost() since it's the primary function determining boost values.
This implementation ensures the boost values never exceed MAX_BOOST while preserving all the sophisticated weight calculations that make RAAC's tokenomics work.
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.