Skip to main content

Convert a 0x00 validator to 0x01

Validators created without a withdrawal address have 0x00 credentials. They earn rewards like any other validator, but you can't send anything to an Ethereum address: neither rewards nor, after an exit, the balance. To fix this, sign a change with your mnemonic in the deposit CLI, then submit it with prysmctl. It turns the validator into a regular (0x01) validator, with the withdrawal address you choose. You can do this once per validator.

Operating system
Network

Check your credentials​

Ask your beacon node:

curl -s http://127.0.0.1:3500/eth/v1/beacon/states/head/validators/<VALIDATOR_INDEX_OR_PUBKEY> | jq '.data.validator.withdrawal_credentials'

If they start with 0x00, the validator has no withdrawal address yet: follow this page. If they start with 0x01 or 0x02, it already has one, and you can't change it.

Set the withdrawal address​

The address is permanent

Use an address you control, never an exchange address, and compare every character. Only ever type your mnemonic into the deposit CLI on a machine you trust, ideally offline. Websites that offer to "help" with this step are phishing.

  1. Download the deposit CLI for your platform from the releases page and check its SHA-256 sum against the .sha256 file next to it.

    Extract the archive. It contains the deposit executable.

  2. Collect the inputs:

    • --validator_start_index: the position of the first key in your mnemonic (usually 0). It's the number in the keystore file name, keystore-m_12381_3600_<INDEX>_0_0-..., not the validator's index on the beacon chain.
    • --validator_indices: each validator's index on the beacon chain, as shown by the command above or a block explorer.
    • --bls_withdrawal_credentials_list: each validator's current 0x00 credentials, from the command above.

    The CLI takes one key per validator, starting at --validator_start_index, and pairs them in order: key start with the first validator and first credentials, key start + 1 with the second, and so on. So list validators in the order their keys appear in the mnemonic. If the keys aren't consecutive (for example, 0, 1 and 5), run the command once for each consecutive run of keys. If a key doesn't match its credentials, the CLI stops with an error and signs nothing.

  3. Sign the change from the extracted folder:

    ./deposit generate-bls-to-execution-change \
    --chain=mainnet \
    --validator_start_index=<FIRST_KEY_INDEX> \
    --validator_indices=<VALIDATOR_INDEX_1>,<VALIDATOR_INDEX_2> \
    --bls_withdrawal_credentials_list=<OLD_CREDENTIALS_1>,<OLD_CREDENTIALS_2> \
    --withdrawal_address=<YOUR_WITHDRAWAL_ADDRESS>

    It asks for your mnemonic and writes a file to bls_to_execution_changes/. Check that every to_execution_address in it is your address.

  4. Submit it with prysmctl to a synced beacon node (any client's REST API):

    ./prysm.sh prysmctl validator withdraw \
    --beacon-node-host=http://127.0.0.1:3500 \
    --path=<PATH_TO>/bls_to_execution_changes \
    --accept-terms-of-use \
    --confirm

    You should see:

    INFO validator: Successfully published messages to update 2 withdrawal addresses.

Check that it works​

The change is usually included within minutes. Run the credentials check again: the credentials now start with 0x01 and end with your address.