In order to burn shares in RAACToken contract, a series of steps are performed.
The burn() function in RAACToken contract takes a portion of amount to be burnt as taxAmount and sends this portion to the feeCollector.
In case the feeCollector has not been assigned yet, we skip the transfer. However, this introduces an issue.
Source
Notice, that the transfer only happens after burning the tokens. Therefore, if the feeCollector is not assigned, the portion of amount i.e. taxAmount will NOT be burned and will be kept by the caller.
It may seem harmless at first. However, when this function burn() is called by the contract FeeCollector _processDistributions() .
This function processes the distribution of collected fees to different stakeholders. While doing so, it also burns some portion of collected fee(this is where burn() on raacToken gets called) i.e. Source
All these different portions of shares to be burnt, transferred etc comes from state variable collectedFees which is updated whenever a certain FeeType is deposited into the FeeCollector contract.
We reset this state variable by deleting it, at the end of function call i.e. distributeCollectedFees()
This should not be the intended behaviour, as the shares intended to be burnt are not getting burned.
Multiple distribution will cause these shares to accumulate in the contract when the feeCollector is not present in raacToken.
Manual
Consider adding this in burn() function
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.