Skip to content

Withdraw your staked funds

Withdrawals are enabled for each validator once it's configured to use 0x01 withdrawal credentials which specify an execution layer address that will be the beneficiary of all withdrawn funds.

If your validator was created with 0x01 withdrawal credentials, it's already fully prepared for withdrawals and you can safely skip the next step.

Updating your withdrawal credentials

To migrate your validator from BLS to 0x01 withdrawal credentials, you have to use the same third-party tool that was used to generate the BLS key. You have to create a signed BLS-to-Execution-Change message that must be broadcast to the network (and eventually published in a beacon chain block) in order to execute the desired withdrawal credentials update.

If you have used the staking-deposit-cli tool (formerly known as eth2.0-deposit-cli), please follow the steps provided here. Alternatively, if you have used ethdo, follow the steps provided here.

If you have used other software for generating your BLS withdrawal credentials, please refer to its documentation or development team for further assistance regarding creating a signed BLS-to-Execution-Change message.

Warning

Your choice of withdrawal address is permanent. If you ever wish to switch it later, the only option is to exit your validator and then create a new one.

Tip

The specified withdrawal address doesn't need to match the fee recipient address used by your validator.

Tip

It's recommended that you prepare your BLS-to-Execution-Change message on a secure device, disconnected from the internet. You can use an USB drive to transfer the produced JSON file to the machine where Nimbus is running and then use the following command to broadcast the message to the network:

curl \
  -X POST \
  -H “Content-type: application/json” \
  -d @<Bls-to-Execution-Change-Filename> \
  http://localhost:5052/eth/v1/beacon/pool/bls_to_execution_changes

Periodic withdrawals of staking rewards (partial withdrawals)

Once the validator is configured with 0x01 withdrawal credentials, all staking rewards will be periodically withdrawn as long as the validator balance is above 32 ETH. No user action is required.

Info

It is not possible to manually request specific amounts of ETH to be withdrawn

Full withdrawals

To withdrawal the entire staked balance of your validator, you must perform a voluntary validator exit.

Warning

Voluntary exits are irreversible. You won't be able to validate again with the same key.

Warning

Make sure you've migrated your validator to 0x01 withdrawal credentials before exiting.

The time required for the withdrawal to complete depends on multiple factors such as the total number of validators in the network, the number of other validators attempting to exit at the moment and the current time in the periodic withdrawals cycle. Under typical conditions, it's expected to take 2 to 7 days.

Warning

Do not remove the validator keys or shut down your validator software until the withdrawal operation is complete. Otherwise, you may incur protocol inactivity penalties.

To perform the voluntary exit, make sure your beacon node is running with the --rest option enabled (e.g. ./run-mainnet-beacon-node.sh --rest), then run:

build/nimbus_beacon_node deposits exit --validator=<VALIDATOR_KEYSTORE_PATH>

Note

In the command above, you must replace <VALIDATOR_KEYSTORE_PATH> with the file-system path of an Ethereum ERC-2335 Keystore created by a tool such as staking-deposit-cli or ethdo.

rest-url parameter

The --rest-url parameter can be used to point the exit command to a specific node for publishing the request, as long as it's compatible with the REST API.