Ethereum - Withdrawals

Since the advent of the Beacon Chain, we asked for a stake for validators. At the time our story was basically "Once the merge is done, you'll be able to get these funds back".

So, the merge is done, and it was successful, but the elephant in the room was that it didn't actually include the ability to get your funds back. It turns out that the merge was pretty complicated, and withdrawals are a tiny bit complicated, and to add another feature was potentially introduce bugs or to delay the merge... So we shipped without it.

Bellatrix was the Fork of the Consensus-layer that included all the logic for the merge to work.

Capella is next! And the headline feature included in Capella will be withdrawals. It's pretty significant, because it's a cross-cutting feature that requires changes in both the Execution-layer (EL) and the Consensus-layer (CL).

How will withdrawals work?

TLDR; once you qualify for withdrawals, it's an automated process, and to qualify, your withdrawal key just needs to be an ethereum address.

Withdrawal Key

To break down how this will work, we need to know a little bit about validators, specifically their withdrawal credentials.

There's 2 types of withdrawal credentials that a validator may have been configured with.

  • BLS Keys - Validators at genesis were mostly set up with a BLS key for their withdrawal credentials. At the time we didn't really have a vision of how it would all slot together, and BLS credentials was a safe starting point.

  • ETH address - Validators for a while now have been able to use regular ethereum addresses for their withdrawal credentials.

As of Bellatrix, it was only possible to set the credentials for withdrawals at the time of validator creation, and they could never be updated after that.

As of Capella, if you have configured your validator with BLS withdrawal credentials, you'll be able to update your credentials to use an ethereum address for your withdrawals.

Updating my Withdrawal key

NOTE: Once the address has been updated on your validator, you will not be able to make further modifications to the withdrawal credentials, so it's important that you update this address to an address you own, and have the keys for.

As of Capella, you will be able to alter your validator withdrawal credentials to an Ethereum address, if it has been configured with a BLS address initially.

The change is a one-time opportunity to update your withdrawal credentials, and you will need either your MNEMONIC or your withdrawal BLS private key to sign a message to update your withdrawal credentials.

Updates are submitted to a Consensus-layer (CL) client, and they will be distributed to the network, and need to be included in a block in order to update your validator credentials. This is a similar concept to the Execution-layer (EL) concept of a transaction pool, where all clients basically access a pool as a source of information when building blocks.

It's possible that they aren't picked up by block producers, and there's no penalty for re-submitting the request periodically; for example if nothing has happened in 6 hours; if it has not been processed.

Getting my rewards

Validators have been accruing rewards since genesis. The system is reliant on 32 ETH to secure the network, but everything in excess of that is not needed by the CL.

This excess is what will be returned to active validators that have an ethereum address as their withdrawal address.

Over time, the validator list will be iterated on by validator index (from 1 to N, then loop), and up to 16 withdrawals can be included in each block. This excess of balance is called a partial withdrawal, and full withdrawals (exited validator balance) are also processed in the same way, except they draw down to zero eth.

NOTE: At 16 withdrawals per block, and 7_200 blocks per day, roughly 115_200 withdrawals are possibly daily. This will mean that it'll take around 5 days to iterate the validator set (roughly 550_000) if all validators are candidates for withdrawals, so you will get frequent deposits.

Importantly, the transfer process does not run any EVM code, it simply increases balance of the ethereum address that it's been told to allocate funds to. The advantage in doing this is that it is a free transaction (new operation), so balances aren't reduced by gas cost. Further, it's not a normal transaction might be reverted, the balance transfer is it's own special operation in the EL.

This process is automatic, and as long as you have an ethereum address as your withdrawal key, you will periodically be considered. BLS withdrawal credentials are still completely valid to use, so if you don't wish for periodic withdrawals, then staying on your BLS key (or creating a new validator with a BLS key) would be a good option for you to consider.

Capella Fork

At the time of the Capella fork, it's possible that a small number of people will 'need' to get changes in for BLS credentials, and it's possible that there may be a bit of a rush.

A number of people believe their mnemonic was compromised, and some people desparately want their funds back as quickly as possible for exited validators, and probably some other reasons as well. These are all valid reasons to potentially try to get a change in as quickly as possible to get your credentials updated.

For everyone else, I put it to you that it's not a rush. There's no real reason to be in the initial set of changes, at least as far as I can see, unless you're part of that small subset of people. We do expect a tiny bit of congestion on the change, but it's possible we're just projecting, it's hard to know how many people fall into the above buckets, or if there's other reasons.

Given that the BLS changes are included at a rate of 16 per block, the queue will progress quite quickly, and some validators will be prioritising their own changes as block builders, which is completely valid.

After 2-3 days though, the queue will likely be completely empty, even if every single validator wants to change their credentials. Similar to withdrawals per block, 115_200 BLS changes can be processed daily, and at the time of writing there's roughly 310_000 validators that could potentially wish to change to ethereum addresses for their withdrawal keys.

The reason I'm saying this, is the funds aren't disappearing, and there's no real rush to get the initial allocation, as your validator balance will keep accruing regardless of what else happens on the network. So if you're not in that small subset of urgent changes, I would suggest holding off a few days, then your BLS change will go through quickly and you won't need to wait hours to check if it got into a block.

Tracking my balance

Previously, a good indicator for whether your validator is performing well was the balance. People would use this as a guide, and the balance would only ever go up, so looking at todays balance vs. yesterdays would be a good indicator for how your validator is doing in terms of activity on the network.

Once you're using withdrawals, your balance graph will look more like a saw-tooth, dropping down to 32 ETH periodically (roughly every 4 days). You can still use it to see how you're going, but it's worth understanding the difference in the pattern you'll see, as it'll initially be an adjustment to see your balance periodically reset to 32 ETH.

Your ethereum address will also have periodic eth deposits which will be potentially a good way to map over time if the address is specific to the validator balance.

WEN Withdrawals?

Withdrawals are coming very soon to ethereum, with the Capella fork. We're in the final stages of testing, and it's looking very promising so far! Obviously if issues are found there may be delays, but it's very very close, and the spec is currently frozen.

Subscribe to Rolfy.eth
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
This entry has been permanently stored onchain and signed by its creator.