The _update
and transfer
functions both scale the amount using rayDiv
with the normalizedIncome
, but it seems redundant to apply this scaling in both places.
https://github.com/Cyfrin/2025-02-raac/blob/89ccb062e2b175374d40d824263a4c0b601bcb7f/contracts/core/tokens/RToken.sol#L213
https://github.com/Cyfrin/2025-02-raac/blob/89ccb062e2b175374d40d824263a4c0b601bcb7f/contracts/core/tokens/RToken.sol#L309
In the RToken
contract the _update
and trasnfer
functions apply scaling to the transfer amounts using rayDiv
with normalizedIncome
.
Both functions are scaling the amount by the same factor, rayDiv(ILendingPool(_reservePool).getNormalizedIncome())
.
The _update
function is already called internally by the transfer
function via super.transfer()
. If transfer
also applies the scaling, this leads to a redundant operation, potentially doubling the scaling effect and resulting in incorrect token transfers.
Redundant scaling could lead to unintended transfer amounts being sent, affecting token balances and disrupting protocol logic.
Manual review
To avoid redundant scaling, ensure that only one of the functions (either _update
or transfer
) applies the scaling logic.
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.