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.