The following steps align with our mainnet guide. You may need to adjust file names and directory locations where appropriate. The core concepts remain the same.
Overview: What? Withdrawals? Owls?
Greetings, fellow ETH staker! If you were staking before April 2, 2021, setting ETH withdrawal (0x01) credentials was not yet released and so, this guide is relevant for you.
As of the Shapella upgrade, ETH validators with 0x00 credentials should update to 0x01 credentials to enable partial withdrawals, the sweeping of excess ETH > 32.
If your validator previously voluntarily exited or you now would like to stop validator duties, you'll need to set your withdrawal credentials to fully reclaim your staked ETH.
Your validator's mnemonic keys (the offline 24 word secrets)
An offline air-gapped computer. Create a Linux Live USB like Ubuntu or Tails; needs a USB key.
A ETH staking node using Ubuntu or Linux, also known as online computer.
A USB storage key for moving files between the offline and online computer.
If you have BLS credentials, continue with the rest of this guide. Otherwise, stop because ethdo will output "Ethereum execution address" and that means you've already set your withdrawal address!
Download pre-generated offline preparation files made daily by EthStaker.
If you have BLS credentials, continue with the rest of this guide. Otherwise, stop because ethdo will output "Ethereum execution address" and that means you've already set your withdrawal address!
Run the following command to call your consensus client and generate a list of active validators with relevant information for use on your offline computer. In order to generate this list from your local beacon node, ensure the REST API is enabled; otherwise the default fallback beacon node, http://mainnet-consensus.attestant.io, will be called.
./ethdo validator credentials set --prepare-offline
After a minute or two, you should see the text, "offline-preparation.json generated"
Using your USB key, copy both
the ethdo executable
and offline-preparation.json file
to your offline air-gapped computer.
Step 2: Create change credentials file
Run ethdo with your mnemonic and withdrawal address. Transfer "change-operations.json" file via USB key back to online computer.
On your offline air-gapped computer, disconnect any internet Ethernet cables or WiFi / bluetooth before continuing. Make sure you're truly offline!
Open a terminal window or shell. Shortcut: CTRL + ALT + T
After copying the ethdo executable and offline-preparation.json file to your offline computer's HOME directory, ensure the ethdo file has execute permissions.
chmod +x ethdo
This ethdo command sets your validator credentials and the output is stored in a change-operations.json file. Replace <MY MNEMONIC PHRASE> AND <MY ETH WITHDRAW ADDRESS> accordingly.
./ethdo validator credentials set --offline --mnemonic="<MY MNEMONIC PHRASE>” --withdrawal-address=<MY ETH WITHDRAW ADDRRESS>
After a few seconds, change-operations.json is created. It's normal for no message to be displayed.
Triple check the resulting file for your withdraw address.
cat change-operations.json
Ensure the field "to_execution_address": contains your withdraw address.
Using your USB key, copy
change-operations.json file
back to your online computer.
Power off your offline air-gapped computer.
Step 3: Broadcast change credentials
Simply run the set command to send your change.
On the online computer, copy the change-operation.json to your home directory, where ethdo is also located.
Run the following command to broadcast your withdrawal credentials.
./ethdo validator credentials set
Congrats! Your BLS to Execution change is now pending in a queue, waiting to be included in a block.
For your information:
Up to 16 BLS to Execution changes are included in each proposed block.
Depending on the withdrawal queue size, your withdrawal change may take up to a few days to be finalized.
Replace <MyValidatorIndex> and run the following ethdo command:
ethdo validator credentials get --validator=<MyValidatorIndex>
The resulting output will start with: Ethereum execution address
Alternatively, check your favorite beacon chain explorer such as beaconcha.in and etherscan.io for the 0x01 credentials.
I voluntary exited a while ago and don't have a synced node anymore. What are my options?
Use Ethdo on an offline computer to create the exit message, as shown in step 2 above, and then perform step 3 using the alternative broadcast method with beaconcha.in
Can I use a Gnosis Safe address as my ETH withdrawal address?
Yes -- in fact, this is also a great idea as it allows you to rotate private keys (and keep the same public address) or use other more multi-sig strategies.
Is the fee-recipient address the same as this withdrawal address?
They can both be set to the same ETH address; however, understand that these are independent and withdrawal credentials have a different purpose than your fee recipient, which receives transaction fee tips from proposed blocks.
Partial Withdrawals vs Full Withdrawals?
Full validator withdrawal: To withdraw your entire stake on Ethereum and no longer perform validator duties. Exit your validator, and then after your exit request progresses through the withdraw queue while finally your full validator balance is transferred to your withdrawal address.
Partial validator withdrawal: To withdraw your validator’s earnings only. For a validator, any amount over the initial 32 ETH deposit is the earnings and is automatically swept every few days to the withdrawal address.
I don't have a mnemonic phrase. I used a private key.
In step 2, use this credentials set command instead.
ethdo validator credentials set --private-key=<my-priv-key> --withdrawal-address=<my-eth-withdrawal-address>
I want different withdrawal addresses for each of my validators.
In step 2, use this credentials set command instead.
ethdo validator credentials set --mnemonic="<my-mnemonic-phrase>" --path='m/12381/3600/<my iTH validator>/0' --withdrawal-address=<my-eth-withdrawal-address>
Where the path is the derivation path to your withdrawal key.
For example, m/12381/3600/i/0 is the path to a withdrawal key, where i starts at 0 for your 1st validator, 1 for your 2nd validator ...
I need to change my withdrawal address.
The only way to change withdrawal addresses is to perform a full withdrawal by exiting a validator and then, creating a new validator key as if starting the staking journey over again.
Pre-requisites: Before you begin
An ETH withdrawal address you control the private keys to, ideally one from a hardware wallet. DO NOT USE A EXCHANGE ADDRESS!
Example output of a validator with BLS credentials.
Example output of a validator with BLS credentials.
Double check your work as this is permanent once set!
FINAL REMINDER: DO NOT USE AN EXCHANGE ETH ADDRESS AS YOUR WITHDRAWAL ADDRESS