Lucene search

K
code423n4Code4renaCODE423N4:2023-06-RESERVE-FINDINGS-ISSUES-13
HistoryJun 09, 2023 - 12:00 a.m.

sell reward rTokens at low price because of skiping furnace.melt

2023-06-0900:00:00
Code4rena
github.com
6
vulnerability
rsretoken
revenuetrader
sellprice
furnace.melt
refresh
mitigation

AI Score

7.1

Confidence

Low

Lines of code

Vulnerability details

Impact

The reward rToken sent to RevenueTrader will be sold at a low price. RSR stakers will lose some of their profits.

Proof of Concept

RevenueTraderP1.manageToken function is used to launch auctions for any erc20 tokens sent to it. For the RevenueTrader of the rsr stake, the tokenToBuy is rsr and the token to sell is reward rtoken.

There is the refresh code in the manageToken function:

} else if (assetRegistry.lastRefresh() != uint48(block.timestamp)) {
    // Refresh everything only if RToken is being traded
    assetRegistry.refresh();
    furnace.melt();
}

It refreshes only when the assetRegistry has not been refreshed in the same block.

So if the actor calls the assetRegistry.refresh() before calling manageToken function, the furnace.melt() won’t been called. And the BU exchange rate of the RToken will be lower than actual value. So the sellPrice is also going to be smaller.

(uint192 sellPrice, ) = sell.price(); // {UoA/tok}

TradeInfo memory trade = TradeInfo({
    sell: sell,
    buy: buy,
    sellAmount: sell.bal(address(this)),
    buyAmount: 0,
    sellPrice: sellPrice,
    buyPrice: buyPrice
});

Tools Used

Manual review

Recommended Mitigation Steps

Refresh everything before sell rewards.

Assessed type

Context


The text was updated successfully, but these errors were encountered:

All reactions

AI Score

7.1

Confidence

Low