This is the official discussion thread for RPIP-70: rETH Withdrawal liquidity via EIP-7002. Discussion has been going on for a while in the research thread.
This proposal is about exiting validators for withdrawal liquidity. There is another RPIP about exits for underperformance. Both of them use exit requests, defined in a third RPIP. The idea is to have all three of them in Saturn 2 and looking at all of them may be helpful to understand the design.
There has already been quite a bit of discussion on the technical side of this proposal in discord and at the same time there are still quite a few open questions with the design. Some of these are quite high level and I am hoping to get engagement from the pDAO at large on them.
Megapool Exit Criterion
We could simply do random selection or pick any criterion that can be checked on-chain, candidates include:
- lower RPL stake first
- first in, first out
- together with increasing bond requirement, exiting from megapools the furthest below bond requirement
Restitution for Exited NOs
In contrast to RPIP-73, where node operators are exited for bad performance, under this RPIP we are exiting people that may have been doing a perfectly fine job and we may be choosing them with at least some level of randomness. So one question that has come up is if we should offer some kind of restitution for exited validators. Ideas that have been brought up so far include:
- Giving express tickets for exited validators. This seems quite easy to do, but may not be all that impactful.
- Some way for exited node operators to skip ahead of people already in queue.
- A direct ETH payment, financed from rETH in the withdrawal queue that stops earning rewards.
Withdrawal Queue: NFT and Partial Filling
A position in the Withdrawal Queue could be represented by an NFT. Since the specification does not allow users to leave the Withdrawal Queue by canceling a request, they could instead sell their NFT to liquidate their position immediately.
On the other hand, people that donāt want to wait through the Withdrawal Queue already have the option to sell rETH instead. It may be more difficult to find buyers for a non-fungible queue position, and implementing the NFT would create extra gas overhead (~100k gas?) for everyone.
Another question is if users in queue should be able to do partial withdrawals as ETH becomes available. It may increase implementation complexity, especially in combination with NFTs.
Without partial filling, users would be able to achieve similar behavior with splitting withdrawal requests into multiple smaller ones. Without partial filling, it may also make sense to limit the ETH per request to avoid users having to wait a long time for their request to be completely filled.
Liquidity Buffer and Exiting to Fill Buffer
In order to ensure that the Withdrawal Queue can be serviced before rETH redemptions outside the queue, we need to set the liquidity buffer (rETH collateral target) to 0. The current proposal replaces it with a new buffer at the deposit pool level.
A buffer contributes to peg stability and it protects against the validator churn griefing discussed in Security Considerations, but unproductive ETH sitting in it hurts rETH yield. Arguably a buffer is less necessary with a proper withdrawal mechanism.
A related question is if we should exit to fill the Withdrawal Queue or exit to fill the liquidity buffer. Exiting to fill the buffer would lead to a nicer UX for rETH stakers: as long as demand for withdrawals is low, people could instantly redeem rETH at the protocol rate, at the cost of reduced rETH APR.
Distribution Delay
Minipools donāt immediately make ETH available for rETH burns. ETH first needs to be distributed, which initially is exclusive to the node operator and very delayed for others (currently 90 days after starting the distribution window). Therefore, if we are exiting minipools to fill the Withdrawal Queue, it is possible that queue wait time is unexpectedly long.
Because minipool delegate upgrades are opt-in, this canāt be reliably addressed with a delegate upgrade. Potential options include:
- Lowering the delay before permissionless distribution. Security implications would need to be considered.
- Automate distribution in smartnode and introduce a penalty for failing to distribute. Unclear how this could work for Allnodes.
- Allow user distributions with a final validator balance proof without the delay. This could be implemented by lowering the delay, distributing, and setting the delay back in one call.
