# 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! [toc] --- **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](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md). 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: - Partial withdrawals: Balances in excess of 32 Eth (earned rewards) are withdrawn to an Ethereum address and can be spent immediately. The validator will continue to be a part of the beacon chain and validate as expected. - Full withdrawals: The validator will exit and stop being a part of the beacon chain. The entire balance (32 ETH principle and any rewards) of the validator is then unlocked and allowed to be spent after the exit and withdrawal mechanism is complete. --- #### **Q:** What are `0x00` and `0x01` withdrawal credentials prefixes? **A:** The beacon chain validators contain a field known as withdrawal credentials. The first two bytes of this credential are 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`](https://github.com/wealdtech/ethdo) tool. ```bash 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](http://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: - [Exiting a Prysm validator](https://docs.prylabs.network/docs/wallet/exiting-a-validator) - [Exiting a Lighthouse validator](https://lighthouse-book.sigmaprime.io/voluntary-exit.html) - [Exiting a Teku validator](https://docs.teku.consensys.net/en/latest/HowTo/Voluntary-Exit/) - [Exiting an eth-docker validator](https://eth-docker.net/Support/Exit/) - [Exiting a DAppNode validator](https://forum.dappnode.io/t/how-to-exit-an-eth2-validator/786) --- #### **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](https://notes.ethereum.org/@launchpad/withdrawals-guide) 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](https://www.notion.so/ethstaker-knowledge-base/staking-glossary#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](https://notes.ethereum.org/@launchpad/zhejiang). --- #### **Q:** I have no Goerli ETH to test, where can I get some to test? **A:** ![thats_the_neat_part](https://storage.googleapis.com/ethereum-hackmd/upload_26ece73e2dd6c85cd73ae4fef10f8e15.jpg) 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](http://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](https://discord.io/ethstaker) and look out for the #withdrawals channel. **Subreddit**: [reddit.com/r/ethstaker](http://reddit.com/r/ethstaker) --- ### **Resources:** The core specification: - [https://github.com/ethereum/consensus-specs/tree/dev/specs/capella](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](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](https://github.com/ethereum/staking-deposit-cli)) - How to trigger withdrawals, credential change ([https://notes.ethereum.org/@launchpad/withdrawals-guide](https://notes.ethereum.org/@launchpad/withdrawals-guide)) - How to join the public withdrawals testnet ([https://notes.ethereum.org/@launchpad/zhejiang](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](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://ethstaker.gitbook.io/ethstaker-knowledge-base/) - [https://github.com/benjaminchodroff/ConsensusLayerWithdrawalProtection](https://github.com/benjaminchodroff/ConsensusLayerWithdrawalProtection) {%hackmd theme-dark %} <style> .markdown-body pre {background-color: #1E1E1E;border: 1px solid #555 !important;color: #73BCE0;border-radius:8px;/*border-radius:0px;*/ } .markdown-body pre .htmlembedded {color: #C8D4C8 !important; } .markdown-body pre .hljs-tag {color: #6D726E; } .markdown-body pre .token.keyword {color: #C586C0; } .markdown-body pre .token.string, .markdown-body pre .hljs-string {color: #C68362; } .markdown-body pre .hljs-comment, .markdown-body pre .token.comment {color: #6A9955; } .markdown-body pre .hljs-attr {color: #73BCE0; } .markdown-body pre .hljs-name {color:#569CD6; } .markdown-body pre .token.operator {color:#C8D4C8;background:transparent; } .markdown-body pre .token.property {color: #73BCE0; } .markdown-body pre .token.function {color: #DCDCAA; } .markdown-body pre .token.builtin {color: #34B294; } .markdown-body pre .token.number {color: #B5CEA8; } .markdown-body pre .token.constant {color: #3BC1FF; } .markdown-body pre .hljs-addition {color: #96D47D;background: #373D29; } .markdown-body pre .hljs-deletion {color: #E76A6A;background: #4B1818; } .markdown-body pre .hljs-selector-class {color: #D7BA5F; } .markdown-body pre .hljs-attribute {color: #9CDCFE; } .markdown-body pre .hljs-number {color: #C68362; } .markdown-body pre .hljs-meta {color: #2C7CD6; } </style>