The RAACToken contract directly transfers tax fees to the fee collector without using the FeeCollector::collectFee() function, causing incorrect fee tracking and distribution.
The RAACToken::_update() function directly transfers tax fees to the fee collector address instead of properly collecting fees through the FeeCollector::collectFee() function. This bypasses the fee tracking mechanism in the FeeCollector contract.
The issue occurs in RAACToken::_update():
The FeeCollector contract expects fees to be collected through its collectFee function which updates the CollectedFees tracking structure:
User transfers 1000 RAAC tokens with 1% swap tax and 0.5% burn tax
RAACToken::_update calculates total tax of 15 tokens (10 swap + 5 burn)
5 tokens are burned and 10 tokens are directly transferred to fee collector
The FeeCollector::collectedFees structure is not updated
When distributeCollectedFees is called, these 10 tokens are not included in distribution calculations
veRAAC holders receive fewer rewards than they should
Fees sent directly to the fee collector are not tracked in the CollectedFees structure
This leads to incorrect fee distribution calculations
veRAAC holders receive fewer rewards than entitled
Protocol statistics and accounting are inaccurate
Fees become permanently locked in the fee collector contract
Use FeeCollector.collectFee
Modify RAACToken::_update to use the proper fee collection mechanism:
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.