Brought to you by @0xfan
Some articles written about the Ethereum withdrawal process have used outdated information. Here in this article, we reorganize the validator deposit-withdrawal lifecycle after the Shanghai upgrade and estimate to what extent the selling pressure and withdrawal waiting time might be like.
For a partial withdrawer, since it only needs to join one waiting queue along with the full withdrawer and there is no churn function to limit its throughput, a much shorter waiting time would take place. In an optimal case, withdrawal can be handled immediately as the first one to join the withdrawal queue, while an extreme of more than 3.6 days is still possible if the withdrawer is ranked the last.
For a full withdrawer, more than 103 days of waiting time are possible depending on how many newcomers initiate partial withdrawals. Whereas in a good case, it can happen within a day. However, for the foreseeable future, once a validator has exited, there’s no going back.
Only with a 0x01-type withdrawal credential can a validator enable withdrawals. As of November 26, 2022, there were still ~61% of active validators not upgraded to the 0x01 type.
In terms of the market impact of withdrawals, there would be three stages of selling pressure from mild to high to small. The first two stages would suffer from high selling pressure in the range of 46k to 148k per day depending on the different partial withdrawal rates. Whereas for the last stage when the full withdrawals are at majority, the selling pressure would drop to the range of 48k to 58k per day.
By calculating the total amount of issuance and burned ETH from the London Upgrade to the Merge, Shanghai Upgrade's total selling pressure would likely be no more than that, but with a heavier selling pressure per day.
Churn Limit: A function to constrain the maximum amount of full withdrawals that can leave the queue per epoch.
Withdrawal Credential: One of the fields a validator must specify for verifying the destination of valid withdrawals.
On Dec 8, 2022, Ethereum announced the network’s next hard fork would take place in March 2023. This upgrade, known as the Shanghai upgrade, will include code allowing withdrawals of Ether staked in the Beacon Chain since December 2020, finally giving participants a timeline for reclaiming their ether.
Outside the core EIPs of withdrawals, some code changes on the EVM would also be introduced to the Shanghai upgrade, leaving EIP-4844 (proto-danksharding) to the next upgrade (Cancun)
There are two kinds of withdrawals that a validator can trigger: full and partial withdrawals.
Every validator needs a minimum deposit of 32 ETH. Partial withdrawals allow any validator to get their cumulative rewards. After upgrading their withdrawal credential to 0x01-type, this withdrawal process can happen automatically on a periodic base without having to leave the active validator set.
Full withdrawal flow begins when a validator safely leaves the exit queue. Ethereum has introduced a churn limit function to constrain the maximum throughput of leaving the exiting queue. So far, the amount of active validators is 491582, resulting in only 7 validators (491582/65536) that can successfully leave the exit queue per epoch. It is worth mentioning that each block could only have a maximum of 18 validators getting slashed.
Once an unslashed validator leaves the exit queue, there is a ~27-hour period until they can withdraw. Whereas for a validator that gets slashed (e.g., double voting or surround voting), it would be forced to initiate exit, and a further delay of ~36 days is imposed.
Partial and full withdrawals used to be processed with two separate functions, where the total number of partial withdrawals was limited to 256 per epoch, and full withdrawals were not. This would result in a much longer withdrawal time but weaker selling pressure.
However, under the current design, both full and partial withdrawals need to enter the same withdrawal queue, where the maximum amount of withdrawals allowed in each block (execution payload) is 16. That said, for all 491582 active validators to complete either full or partial withdrawals, around 4.25 days (491582/16*12/3600/24) are at least needed. However, since several waiting queues cause extra delay within the whole withdrawal process, the actual withdrawal time would be indeed much longer and varies in different situations.
As shown above, both full and partial withdrawals are processed in the withdrawal queue. Although there is no additional queue before joining the withdrawal queue for partial withdrawals, an exit queue with the churn limit function constrains the maximum number of full withdrawals that can be handled per epoch. This exit queue slows down the withdrawal time in a way that the number of partial withdrawals and active validators would significantly drag down withdrawal efficiency.
The withdrawal process is involved several waiting queues with different exit rates and is strongly influenced by the dynamic parameters at each time. By using a static analysis of three different cases, we can get to know to what extent the deviation of the lucky and unlucky withdrawal time and market impact would be.
We assume no newcomer initiates withdrawal other than the original activated validator sample at the time of the Shanghai upgrade.
A full withdrawal means the validator has either voluntarily or was forced to exit the active set. The full withdrawal process is mainly constrained by the churn limit function on how many validators can leave the activation queue to earn rewards. Under the current active validators level, only a maximum of 7 validators would be able to leave the activation queue per epoch.
Currently, the Shanghai upgrade is scheduled for March 2023. By then, under a mild growth rate, the churn limit of the activation queue would reach 8. Whereas under an aggressive scenario, it would still be possible for the leaving rate to reach 9, assuming more than 589,824 active validators on the mainnet by then.
Here we assume all the full withdrawal is voluntary. Unlike the activation queue, there is a confirmation delay for any validator who leaves the queue. Whereas for the exit queue, the forced join exit queue delay gives enough time for confirmation.
The Mild Case means the validator is in the top 25% to join the exit and withdrawal queue. For the optimal and bad cases, the validator is the first and last one to join the queue respectively.
Even under the optimal case, we assume the partial withdrawal validators still rank before the full withdrawal validator, which indicates all the partial withdrawals will join the withdrawal queue before 261 epochs.
In the optimal case, where the full withdrawal is the first to join the exit queue, a 3-day withdrawal time delay is required due to the assumption that all partial withdrawals would join the withdrawal queue before 261 epochs. An unlucky full withdrawal might require 103 days before being processed. Note that in reality, it is still possible for a validator to suffer a much larger waiting time than the bad case, it depends on how many partial withdrawals initiates by the newcomers during the delay period.
Note that in the bad and mild cases, the epoch that the validator joins the withdrawal queue is far larger than the last partial withdrawal validator leaving time, resulting in zero waiting time to leave the withdrawal queue (here we assume there are no additional partial withdrawals).
Partial withdrawal does not need a waiting time before joining the withdrawal queue. Compared to at least 256 epochs delay for the full withdrawer, partial withdrawals would be much faster.
In the optimal case, the validator is the first one to join the queue on that block. There is no waiting time for him to leave the queue, resulting in almost immediate withdrawal. In the bad and mild cases, the partial withdrawal validator would take 1-3 days to get the rewards on the execution layer.
The validator must hold 0x01-type credentials in order to enable withdrawals. Therefore, all those with 0x00 type credentials must upgrade before withdrawing ETH.
what is the withdrawal credential?
Any validator must initialize several parameters locally before submitting their ETH deposit and joining the validator registry.
The withdrawal credential is one of the fields that the validator must specify for verifying the destination of valid withdrawals. To submit a deposit, all validators must set the withdrawal credentials.
Currently, there are two types of withdrawal credentials: BLS withdrawal and Ethereum address withdrawal.
BLS withdrawal (prefix 0x00). This allows a BLS key pair (private&public key) to trigger withdrawals.
ETH1 address withdrawal (prefix 0x01). This type of credential specifies a 20-byte ETH1 address (Execution layer address) as the recipient for all withdrawals.
For validators with 0x01 credentials, withdrawals can happen automatically on a periodic basis. Excess balances will be withdrawn if validators are still active, and the full balance will be withdrawn if validators are out of the exit queue.
Ratio of BLS and ETH1 type withdrawal credential
According to Rolfyone, there were about 182k validators that had ETH1 address withdrawal credentials as of November 26th. With 467,213 validators in the mainnet, this left about 61% of validators still needing to upgrade to 0x01 type withdrawal credentials to enable withdrawals manually.
Currently, the switching process has been enabled by tools like ethdo that sign the messages to update the credentials. Regarding the amount of staked ETH flows into circulation, the percentage of 0x00 credentials that remain unchanged should be considered.
The withdrawal credential upgrade would not drag the withdrawal time, but would only impact the circulation of ETH during the first wave of withdrawals.
Currently, the average balance of the validator is 33.93 ETH. There is a great potential for validators to withdraw the cumulative staking rewards and reduce the balance to 32 ETH, mainly because the max effective balance is 32 ETH, meaning any additional balance would not have an impact on the rewards or penalties.
According to this withdrawal flow, both full and partial withdrawals need to wait in the same queue, where the maximum throughput of partial withdrawals is limited to 256. There are no more constraints on the partial withdrawals that affect the number per epoch, due to all the withdrawal types being considered the same, with the only difference being how many balances to reduce for full and partial withdrawals.
The market impact of withdrawals is shown below. Since all the validators can only choose either partial or full withdrawal at once, here we consider the first wave of withdrawals, where all the validator only initiate their first withdrawal and ignore the newly initiated withdrawals.
Note that even the first full withdrawals need at least 261 epochs before joining the withdrawal queue. Therefore, for the first 261 epochs, there would only be partial withdrawals, and after 261 epochs, the full withdrawal rate is constrained by the churn limit.
Three cases are distinguished by the level of daily selling pressure. There would be three stages of selling pressure from mild to high to small. For the bad case, we estimate daily selling pressure would be up to around 148k ETH per day, while for the good case, there would only be around 93k ETH selling pressure once after the first two stages.
In all cases, the first 2-4 days would suffer from high selling pressure in the range of 46k to 148k per day. However, once all the partial withdrawals leave the queue, the selling pressure would drop to the range of 48k to 58k per day.
However, in a real situation, there may be newly activated validators who constantly initiate a partial withdrawal, resulting in a much longer duration time for the second stage with an average of 122k ETH flowing into the market per day among all three cases.
We can compare it with that in the period of the London upgrade to the Merge when there was 14,400 ETH supply per day, accounting for 5,860,800 supply. Meanwhile, there was 2,624,571 ETH burned due to EIP-1559. So there’s 3,236,229 ETH net selling pressure in total, 7,951 ETH selling pressure a day.
From the London upgrade to the Merge, there’s roughly 3 million ETH selling pressure in total, and this number ranges from 2,173,657 to 4,524,726 in the withdrawal event according to different market sentiments. Speaking of trading activity of the market, ETH is trading at 7,505,775 average volume per day(spot, future, perpetual combined) in the period of the London upgrade to the Merge, and is trading at 7,406,112 average volume per day from the day after the Merge to now. From a coin standard perspective, ETH trading volume has not seen a significant change. If this situation continues to the withdrawal event, the market has almost the same ability to digest the selling pressure compared to the period of the London upgrade to the Merge. But just because the ETH price gets lower, the selling pressure would be easier to digest from the USD standard.
Also, as well-known open information the event is, its impact can be partly hedged before the unlock as there’s a 7M ETH open interest in the futures market. One particular indicator to present market sentiment of ether withdrawal is the skew of the curve eth/steth pool, it measures the sentiment for validators to quit.
To summarize, ETH total selling pressure would be in the same order compared with that in the London upgrade to the Merge period, but this time the duration would be shorter so the selling pressure per day would be heavier. The market’s ability to digest any selling pressure has changed little from the coin standard, but it must be improved if there’s USD flow in to accumulate ETH as its price gets lower than in the old period.