The RAACGauge and RWAGauge contracts use veRAACToken as their staking token, but veRAACToken is non-transferable by design. This makes it impossible for users to stake their tokens in the gauges since the tokens cannot be transferred to the gauge contracts.
There is no clear documentation which token will be used as staking token but the existing tests use the veRAACToken:
[https://github.com/Cyfrin/2025-02-raac/blob/89ccb062e2b175374d40d824263a4c0b601bcb7f/test/unit/core/governance/gauges/RWAGauge.test.js#L53]
[https://github.com/Cyfrin/2025-02-raac/blob/89ccb062e2b175374d40d824263a4c0b601bcb7f/test/unit/core/governance/gauges/RAACGauge.test.js#L51]
The veRAACToken prevents all transfers and trasnferFrom:
The Gauges require a stakingToken when deployed:
When you want to stake that token it will revert because of the _update() function:
Staking functionality in both gauge contracts is completely broken
Manual Review
Provide clear documentation about the staking token that will be used
If the protocol really wants to use the veRAACToken as staking token this requires more work to make sure this doesn't break any core functions
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.