Sour Cyan Rabbit
High
Severity:
Impact: High Likelihood: Medium
In Pool.sol:352-370
- Critical functionality that serves as financial protection for the protocol will not work, the functionality will be eliminated.
Pausing is a key feature of the protocol and their pausing documentation states:
The vault never runs out of ETH related tokens because of two key features:
-
Permissionless Redemptions: holders can and may redeem at any time to delever the protocol and reduce the amount of bond coupons required to be paid by the vault.
-
If coupons exceed the value of ETH in the vault, the vault pauses coupons until the price of ETH recovers or the pool delevers to a point that supports coupons.
The key takeaways for this finding are that the protocol RELIES on users being able to redeem their bondETH for underlying tokens at ANYTIME - and only coupon generation will be paused .
However, this is not the case. In Pool.sol
both redeem
functions have the modifier whenNotPaused
- which ensure they are only executed if the protocol is not paused and stop it from running when it is paused.
https://github.com/sherlock-audit/2024-12-plaza-finance/blob/main/plaza-evm/src/Pool.sol#L353-L354
https://github.com/sherlock-audit/2024-12-plaza-finance/blob/main/plaza-evm/src/Pool.sol#L366-L372
This completely disrupts and eliminates a critical feature that the protocol is RELYING on for financial stability. If not changed and the price of ETH drops - creating the sitiuation where the coupon requirement is greater than the protocol can produce -
1 of their 2 backstop so to speak mechanisms will be non-existent and they will have no choice but just wait until the price of ETH recovers. This will put the protocol is significant financial distress and clearly breaks critical functionality.
Users will not be able to redeem not only bondETH but also levETH when the protocol is paused.
The protocol states that only coupon generation (distribution) and (auction) should be paused / halted. Remove the whenNotPaused
modifier from redeem
.