Medium Risk
https://github.com/Cyfrin/2023-10-SteadeFi/blob/main/contracts/strategy/gmx/GMXWithdraw.sol#L197
https://github.com/Cyfrin/2023-10-SteadeFi/blob/main/contracts/strategy/gmx/GMXWithdraw.sol#L263-L267
In case if user has executed withdrawal and it was not accepted by Steadefi, then processWithdrawFailure
will then put withdrawn amount back to GMX and will loose on slippage, however user will still have same shares amount.
When user withdraws, then he provides shares amount, and the appropriate lpAmt
is calculated to be withdrawn from GMX. Then in case if such withdrawal will fail, for example because user is not happy with amount that was received after withdrawal, then call will revert, which means that system will go to Withdraw_Failed state. Note, that in this case, user's shares will not be burnt, as it's done only, when withdraw has succeeded.
So what we have now. We have executed withdrawal with some slippage, so our total assets has decreased a bit.
What will be done next. We will call processWithdrawFailure
function, which will deposit back all received funds and we will again face some slippage. But user will steal have same shares amount.
As result we have lost funds on 2 actions with slippage, which means that all stakers of GMXVault had a loss.
Stakers of the pool have a loss in case of failed withdrawals.
VsCode
Maybe it can be better, to burn shares even when deposit has failed and then recalculate shares amount after liquidaity is added back to GMX.