When there is rewards in the splitter, LSTRewardsSplitterController.removeSplitter()
function will be reverted by logical error.
LSTRewardsSplitterController.removeSplitter()
function is following.
As can be seen in L134
, the balance
is the initial LST balance of the splitter. If there are rewards to be splitted to receivers, the function calls splitRewards()
in L137
. As a result, the LST balance of the splitter will be decreased as the amount of splitted fees. Therefore the LST balance of the splitter will be smaller than balance
and the withdraw()
function call of L138
will be reverted by lacks of LST balance.
PoC:
Initial State: Assume that balance = 1200
and principalDeposits = 1000
.
In L137
, The total rewards are 1200 - 1000 = 200
. Assume that the half of them 200 * 50% = 100
are split to fee receivers. Then LST balance of the splitter will be decreased to 1200 - 100 = 1100
.
In L138
, since the balance of the splitter 1100
is smaller than balance = 1200
, function call withdraw(1200, _account)
will be reverted.
Admin can't remove the splitter when there are rewards to be split to fee receivers.
Manual Review
Modify the LSTRewardsSplitterController.removeSplitter()
function as follows.
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.