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:
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.
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.
A: They 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.
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.
--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.
A: If your withdrawal credentials are set to 0x01
and point to a valid Ethereum address, then the partial withdrawal will 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.
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:
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.
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.
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.
A: The index number that your validator was assigned when it joined the beacon chain.
0x00
credential to 0x01
?A: Please refer to this guide where it is explained step by step.
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.
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.
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.
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.
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.
A:
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.
A: Soon. Keep an eye on the upcoming announcements on blog.ethereum.org
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.
A: Please join EthStaker Discord/Reddit.
Discord invite: discord.io/ethstaker and look out for the #withdrawals channel.
Subreddit: reddit.com/r/ethstaker
The core specification:
https://github.com/ethereum/consensus-specs/tree/dev/specs/capella
Specifically, look at the validator.md document to see how you enable partial withdrawals.
ethdo (https://github.com/wealdtech/ethdo) handles the BLS change operation for withdrawal credentials (if you currently use 0x00 BLS credentials).
staking-cli tool (https://github.com/ethereum/staking-deposit-cli)
How to trigger withdrawals, credential change (https://notes.ethereum.org/@launchpad/withdrawals-guide)
How to join the public withdrawals testnet (https://notes.ethereum.org/@launchpad/zhejiang)
Look out for community calls; these will be announced in the PM repo https://github.com/ethereum/pm/issues
If you are a solo staker, ETHStakers has a guide which will include information about withdrawals: https://ethstaker.gitbook.io/ethstaker-knowledge-base/
https://github.com/benjaminchodroff/ConsensusLayerWithdrawalProtection
Loading embed note