Partial withdrawals after the Shanghai fork
Modelling the distribution of rewards by validator cohort.
A date has yet to be set, but the Shanghai hard fork is looming.
Discussions around sell pressure are trendy again, yet no one has the data to properly dive into the topic. My original modelling is dated, but continues to be cited, therefore this acts as an update.
This writing assumes basic knowledge of the mechanics behind withdrawals. If you are not familiar with the credential classes discussed below, they are described in great detail in the two resources that follow.
The key changes since my original modelling are:
The control flow for switching between the two classes of withdrawal credentials has been clarified.
All withdrawals will require 0x01 credentials, which were not set by early validators.
The operation to add 0x01 withdrawal credentials is rate limited to 16 operations per block.
Partial withdrawals will happen automatically for all 0x01 credentialed validators, with the network processing a maximum of 16 partial withdrawals per block.
The process for full withdrawals remains unchanged with the exception that a 0x00 validator must set their 0x01 credentials before their withdrawal will process.
For additional information about the process I recommend the following resources:
Christine Kim’s detailed write-up
Who Has Which Credentials?
Most analysts assume that the two classes of validators (0x00, 0x01) have uniform characteristics, but this is a big mistake. When we look at deposits to the beacon chain in the figure below, we see that all genesis validators were created without setting 0x01 credentials. This skews the data heavily.
To this day, about 20% of new validators do not set 0x01 credentials. These are likely individuals using outdated guides and centralized institutions that have not updated their procedures.
The heaviest adopter of the 0x01 credentialing system has been Lido; the liquid staking provider has 88% of their withdrawal credentials set and controls over 60% of all validators that are set up to receive automatic withdrawals. To the naive observer, this may trigger flashbacks of debates around centralization, but in this case, Lido's heavy adoption of the standard is a positive outcome for the network.
Since Lido will be looping their rewards back into new validators to optimize the yield of their staking derivative, the heavy adoption will have the effect of clogging the partial withdrawal queue and decreasing the magnitude of the initial surge of withdrawals.
In addition to being the heaviest adopter of 0x01 credentials, the majority of Lido's validators were activated early, with the largest surge occurring in the spring of 2022 before their staking derivative began trading at a discount. As a result, the average Lido 0x01 validator is older than the average 0x01 validator and holds an outsized amount of automatically withdrawable rewards.
Taking a quotient of accumulated rewards and validator counts, we see in the figure below that the average Lido 0x01 credentialed validator has accumulated 1.23 ETH of rewards, while the average non-Lido 0x01 validator has only accumulated 1.06 ETH.
Validators with 0x00 credentials are heavily skewed by genesis validators who have been accumulating rewards for over two years. The average validator of this class has 2.47 ETH of rewards eligible for partial withdrawals, while the best performing validator had earned 4.9 ETH of base rewards as of February 4, 2023.
Post-Shanghai
When withdrawals are enabled, partial withdrawals will begin processing; performing a sweep of validators and distributing rewards to those in the 0x01 pool. In tandem, validators in the 0x00 pool who have requested to switch their credentials from 0x00 to 0x01 will begin to fill the pool changing the composition over time. Both of these operations happen at a rate of 16 validators per block.
The 0x01 pool will begin heavily skewed towards Lido validators. If the Shanghai fork took place on January 29, 2023 the expected distribution of validators in the first block would have been:
16 validators who originally set 0x01 credentials
9.95 Lido | withdrawing a total of 13.19 ETH.
6.05 non-Lido | withdrawing a total of 6.89 ETH.
No validators who originally set 0x00 credentials.
By block 1,000 (approximately 3 hours, 20 minutes) the expectation would have shifted to:
14.83 validators who originally set 0x01 credentials
9.22 Lido | withdrawing a total of 12.22 ETH
5.61 non-Lido | withdrawing a total of 6.39 ETH
1.17 validators who originally set 0x00 credentials
Withdrawing a total of 3.10 ETH
By block 10,000 (approximately 1 day, 9 hours) the expectation would have shifted to:
7.50 validators who originally set 0x01 credentials
4.66 Lido | withdrawing a total of 6.17 ETH
2.84 non-Lido | withdrawing a total of 3.23 ETH
8.50 validators who originally set 0x00 credentials
Withdrawing a total of 22.57 ETH
Where this profile peaks depends on what percent of 0x00 validators immediately switch their credentials, but in the most extreme case where all 0x00 validators request to change, the profile will peak after 70 hours with partial withdrawals per block of approximately 37.34 ETH—of which 3.01 ETH is from Lido validators.
Anyone who suggests that the peak will occur immediately hasn’t looked deeply at the data and is doing a disservice to their audience.
The animation below shows the evolution of daily partial withdrawals for different shares of the 0x00 validator set that choose to immediately switch their credentials. I think a scenario between the 25% and 50% options is the most likely, which suggests the peak rate will be hit early on Day 2 and last for about two days.
In the most extreme of scenarios, the first day should see partial withdrawals of approximately 110,000 ether (excluding Lido 0x01 validators). This number stands in stark contrast to naive models which suggest that the first day could see partial withdrawals of over 400,000 ether.
Considering that the non-Lido validator set contains a majority of centralized institutions and alternative liquid staking derivatives, and that it is reasonable to expect these validators to, on average, only sell a portion of their rewards, it seems unlikely that the chosen implementation of partial withdrawals will cause a cataclysmic event in the market. The decision to make partial withdrawals automatic likely decreased the initial surge of selling by clogging the queue with validators who do not intend to sell.
I’m not going to make any quantitative predictions about the actual sell pressure; I leave that in the less than capable hands of Twitter personalities.
Before Shanghai
The data is not final, so a natural question to ask is how should we expect the profiles to change until withdrawals are enabled. My intuition is the following:
Validators of all types will continue accruing rewards and new validators will be spun up.
New 0x00 validators will be scarce compared to the 310,000+ of them that exist today, so their average balance will continue to climb and reach 2.5 to 2.6 ETH per validator.
The count of Lido 0x01 validators will continue to climb, while also increasing in average balance to 1.3 to 1.4 ETH per validator.
Non-Lido 0x01 validator counts will climb at an increasing pace, putting downward pressure on the average balance, which I expect to finish in the 1.0 to 1.1 ETH per validator range.
The net result of these increases should be an increase in maximum withdrawal rate on the scale of 10% from the estimates provided in this document.
An increase in the count of validators (particularly 0x01) before withdrawals are enabled will have the added effect of flattening the curve; extending the duration of sell pressure, but slightly decreasing the maximum rate.
Full Withdrawals
The process for full withdrawals remains unchanged. You can track the churn limit in real-time here, but the likely equilibrium at the onset of withdrawals is a churn limit quotient of 8, suggesting that 57,600 ETH will be withdrawable per day via full withdrawals.
A queue will form to both activate new validators and for validators to full exit. The double-ended queue will lock the churn limit and effective validator count at a value until one side of the queue subsides. I suspect that the community will see the Shanghai hard fork as a sufficient de-risking event and result in a surge of new validator deposits, but there will also be many validators that have decided staking is not the right choice for them.
In time the validator count will likely rise, but in the short-term anything can happen.