ETH Withdrawals FAQ

Who is this guide for?

If you run Ethereum validators, you can start testing withdrawals and preparing for withdrawals to go live on mainnet.

Look out for Goerli and Sepolia, as these will fork before the mainnet. Before that, there will be devnets and mainnet shadowforks.

DO NOT ATTEMPT TO CHANGE YOUR BLS KEYS ON MAINNET until the client software is ready to accept your BLS key changes. Each client team will announce once they are ready. We will provide a testnet environment where the BLS change can be tested out without any risk!


FAQ:

Q: What is Shanghai/Capella?

A: Shanghai and Capella are the names of the upcoming Ethereum hard fork. The included EIPs can be found here. One of the major new features is the enabling of Withdrawal of validators from the Ethereum beacon chain. Shanghai is the name of the fork on the execution client side, and Capella is the upgrade name on the consensus layer client side.


Q: What are withdrawals?

A: The Ethereum network currently supports individuals locking 32 Ether in order to run a validator. Validators participate in the Ethereum beacon chain which handles the consensus of the network. The withdrawal fork will give individuals the ability to stop running their validator, exit the network and unlock their 32 Ether and any earned rewards.


Q: What are the two types of withdrawals?

A: They are:


Q: What are 0x00 and 0x01 withdrawal credentials prefixes?

A: The beacon chain validators contain a field known as withdrawal credentials. The first byte of this credential is known as the withdrawal prefix. This value is currently either 0x00 or 0x01. The value is set when the deposit is made by a deposit tool. Validators with 0x00 withdrawal credentials will not immediately be able to withdraw. These validators will need to migrate to 0x01 before partial withdrawals and full withdrawals are enabled and their funds unlocked. This migration is a one time process, so please do so with utmost caution.


Q: How do I check if I have a 0x00 or a 0x01 address?

A: There are multiple methods to do this, the easiest one is to use ethdo tool.

ethdo validator info --validator=<yourvalidatorIndex> --verbose

This will output a “withdrawal credentials” field which either begins with 0x00 or 0x01. Additionally one can check a beacon chain block explorer. For example, within the beaconcha.in website, navigate to your validator page and check the Beaconchain Deposits field under the Deposits tab.


Q: If I used --eth1_withdrawal_address when making my initial deposit, which type of withdrawal credentials do I have?

A: Users who provided the --eth1_withdrawal_address flag with an Ethereum address while setting up their initial deposit will already have their withdrawal credentials in the 0x01 format. Providing this flag with an execution withdrawal address will be the default pattern for stakers from this point forward. Only users who did not make their initial deposit with this data will need to submit the BLSToExecutionChange message to upgrade their credentials.


Q: Do Partial withdrawals happen automatically?

A: If your withdrawal credentials are set to 0x01 and point to a valid Ethereum address, then the partial withdrawal will happen automatically.


Q: Do full withdrawals happen automatically?

A: No. If your validator is currently active and participating in the beacon chain, then the full withdrawal will not happen automatically. You will have to manually initiate an exit to cause this.

Additionally, if you initiate an exit but still have a 0x00 withdrawal credential, your funds will not be withdrawn until a BLSToExecutionChange message is included on chain.


Q: How do I fully withdraw (exit) my validator?

A: Exiting a validator requires a signed message to be sent from your validator client. The exit process details are different for each client. These links are for each specific client:


Q: What is the current proposal for daily withdrawal limits post Shanghai and if the request to withdraw exceeds that limit, what’s the rule to decide who gets the chance on that day?

A: Partial withdrawals of any balances above 32 ETH are automatic and round-robin averaging 1 sweep/week in the current design. Full withdrawals are possible via an exit, which places the validator into the exit queue. The exit queue depends on the size of the validator set in the network. This limit exists to regulate the rate of exit and entry into the beacon chain validator set.


Q: Are partial/full withdrawals be charged gas fees on each time?

A: No, the partial/full withdrawal will show up on your execution layer address without any charge from the ethereum network. It is considered to be a balance increase, instead of a transaction. A gassless state change.


Q: Where does the automatic balance withdraw to?

A: In case you are using a legacy withdrawal credential 0x00, it will not be withdrawn and you will have to perform a migration to 0x01 credentials to complete the withdrawal. If you have already configured your withdrawal address and have a withdrawal credential of 0x01, then rewards in excess of 32 ETH will transfer into the Ethereum address that you have configured. Please be noted this is a balance update, it will not show up as a transaction and will not trigger code execution for smart contract wallets.


Q: What is my validator index?

A: The index number that your validator was assigned when it joined the beacon chain.


Q: How do I migrate my 0x00 credential to 0x01 ?

A: Please refer to this guide where it is explained step by step.


Q: Once I have changed my credential to 0x01, can I change it to an alternative withdrawal address?

A: No, the migration from 0x00 to 0x01 is a one time process and the Ethereum address set cannot be changed. Please make this migration with the utmost care. Note, this can either be an externally-owned account (EOA) or a smart contract.


Q: I have lost my ETH key that I set as the withdrawal address, what can I do?

A: Unfortunately, there is nothing that can be done if the withdrawal address is lost. Please ensure this address is properly backed up and securely stored.


Q: How fast will I be able to make a partial withdrawal? Or when will I get access to the excess rewards that are on my validator?

A: There is a single withdrawal queue that will process partial and full withdrawals. Each slot (every 12 seconds), 16 partial withdrawals, starting from index 0 will take place. If a validator has successfully exited, then a full withdrawal is performed. Otherwise if a validator has a balance in excess of 32 ETH, a partial withdrawal is performed by the automatic sweep. Full withdrawals are be part of the same queue, but they get processed a lot slower. Depending on the validator count, different number of full withdrawals are possible:

Until 327680 active validators in the network, 4 validators can be activated per epoch. For every (4 * 16384) = 65536 active validators, the validator activation rate goes up by one.

5 validators per epoch requires 327680 active validators, allowing 1125 validators per day.

6 validators per epoch requires 393216 active validators, allowing 1350 validators per day.

7 validators per epoch requires 458752 active validators, allowing 1575 validators per day.

8 validators per epoch requires 524288 active validators, allowing 1800 validators per day.

9 validators per epoch requires 589824 active validators, allowing 2025 validators per day.

10 validators per epoch requires 655360 active validators, allowing 2200 validators per day.

The amount of activations scales with the number of active validators and the limit is the active validator set divided by 64.

This table might look familiar to you, as it uses exactly the same number of validators as when you want to begin validating on the beacon chain.

Exiting validators works in the same way, with the number of validators that can exit the beacon chain per day rate limited to preserve the stability of the network.

TLDR: At most *(((active_validator_count)/16)12)/60/60/24 days. Currently, this is around 4.34 days.


Q: What happens to my ETH if I make a full withdrawal but I forgot to set the withdrawal credential to 0x01?

A: Nothing. Your validator will exit, and will no longer be assigned duties, neither able to earn nor lose any more additional ETH. You may still migrate your withdrawal credentials from 0x00 to 0x01. Once this is done, the validator’s balance will be withdrawn into the Ethereum address configured.


Q: Is there any way I could test this out without risking mainnet ETH?

A: Yes, of course. There are various testnets, some of them already have withdrawals feature enabled. The first public testnet is called Zhejiang. Keep an eye out for an announcement regarding this testnet. Here you can be one of the first ones testing out withdrawals functionality. Further info regarding how to join the Zhejiang testnet can be found here.


Q: I have no Goerli ETH to test, where can I get some to test?

A:
thats_the_neat_part

Please try out the upcoming public testnets like Zhejiang to test out the functionality. If you are extremely interested and don’t mind running alpha software, you can ask to join the devnets as well. Goerli ether is difficult to come by, but please give the ethstaker faucet a try.


Q: I already have a Goerli validator, when can I test my credential change, and partial/full withdrawal there?

A: Soon. Keep an eye on the upcoming announcements on blog.ethereum.org


Q: Can I cancel a withdrawal request that is in the queue?

A: No you cannot, this is a one time, irreversible process. Once you submit your withdrawal request (BLSToExecutionChange and/or exit) you can’t go back. Please only exit or change credentials when you are fully aware of what the specific operation will do and with the utmost caution.


Q: I still have some more questions, who can I ask?

A: Please join EthStaker Discord/Reddit.

Discord invite: discord.io/ethstaker and look out for the #withdrawals channel.

Subreddit: reddit.com/r/ethstaker


Resources:

The core specification:

Loading embed note