Current design seems to choose to apply scaling in _update function. Indeed, mint and burn functions pass to _mint and _burn functions the amount of underlying asset. Then, the overridden _update function applies the scaling to get the amount of interest-bearing token before minting or burning.
The problem is that transfer first applies a scaling, and then calls super.transfer which will call _update, applying a second scaling. This is incorrect, leading to excess scaling, transferring less tokens than expected while transaction is successful for a given amount passed as argument.
The impact of this vulnerability is high as it leads to systematic transfers of less tokens than expected with the transfer function. This might break future integration of RAAC protocol.
Manual review.
Ensure that only one division scaling is applied: remove scaling in transfer and transferFrom functions and only apply the scaling in _update 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.