How to use staking-deposit-cli to generate SignedBLSToExecutionChange

Introduction

To enable your beacon chain validator(s) to automatically withdraw balances to your execution layer (Eth1) address, you can use the staking-deposit-cli tool to generate the SignedBLSToExecutionChange message JSON file. This message includes the request to change your old BLS withdrawal credentials to the new withdrawal credentials in execution address format .

To make this message to be included in Mainnet, you will need to upload this message to a beacon node’s SignedBLSToExecutionChange pool after Capella/Shanghai hard fork.

To learn more about withdrawals, see Withdrawals FAQ.

Installation

Option 1: binary files

Option 2: source code + virtualenv

Download bls-to-execution-change branch:

git clone -b bls-to-execution-change git@github.com:ethereum/staking-deposit-cli.git

Install and set virtualenv:

pip3 install virtualenv
virtualenv venv
source venv/bin/activate

Install dependencies:

python3 setup.py install
pip3 install -r requirements.txt

Generate bls_to_execution_changes-*.json file

Assume you have generated deposit in EIP-2334 format and have BLS withdrawal credentials. If not, you can generate it by following docs.

Execute with params

You can find docs of full arguments here.

Option 1: binary files

Interactive mode
./deposit ./staking_deposit/deposit.py generate-bls-to-execution-change
Command line with flags
./deposit ./staking_deposit/deposit.py --language=english generate-bls-to-execution-change \
--chain=mainnet \
--mnemonic="<YOUR MNEMONIC>" \
--bls_withdrawal_credentials_list="<YOUR OLD BLS WITHDRAWAL>" \
--validator_start_index=<THE KEY START INDEX IN EIP-2334> \
--validator_indices="<YOUR VALIDATOR INDEICES>" \
--execution_address="<THE EXECUTION ADDRESS FOR WITHDRAWALS>"

[Example]

./deposit --language=english generate-bls-to-execution-change \
--chain=mainnet \
--mnemonic="sister protect peanut hill ready work profit fit wish want small inflict flip member tail between sick setup bright duck morning sell paper worry" \
--bls_withdrawal_credentials_list="0x00bd0b5a34de5fb17df08410b5e615dda87caf4fb72d0aac91ce5e52fc6aa8de,0x00a75d83f169fa6923f3dd78386d9608fab710d8f7fcf71ba9985893675d5382" \
--validator_start_index=0 \
--validator_indices="1,2" \
--execution_address='0x3434343434343434343434343434343434343434'

Option 2: source code + virtualenv

Interactive mode
python ./staking_deposit/deposit.py generate-bls-to-execution-change
Command line with flags
python ./staking_deposit/deposit.py --language=english generate-bls-to-execution-change \
--chain=mainnet \
--mnemonic="<YOUR MNEMONIC>" \
--bls_withdrawal_credentials_list="<YOUR OLD BLS WITHDRAWAL>" \
--validator_start_index=<THE KEY START INDEX IN EIP-2334> \
--validator_indices="<YOUR VALIDATOR INDICES>" \
--execution_address="<THE EXECUTION ADDRESS FOR WITHDRAWALS>"

[Example]

python ./staking_deposit/deposit.py --language=english generate-bls-to-execution-change \
--chain=mainnet \
--mnemonic="sister protect peanut hill ready work profit fit wish want small inflict flip member tail between sick setup bright duck morning sell paper worry" \
--bls_withdrawal_credentials_list="0x00bd0b5a34de5fb17df08410b5e615dda87caf4fb72d0aac91ce5e52fc6aa8de,0x00a75d83f169fa6923f3dd78386d9608fab710d8f7fcf71ba9985893675d5382" \
--validator_start_index=0 \
--validator_indices="15566,15567" \
--execution_address='0x3434343434343434343434343434343434343434'

For devnet, you can add a param:

--devnet_chain_setting='{"network_name": "<NETWORK_NAME>", "genesis_fork_version": "<GENESIS_FORK_VERSION>", "genesis_validator_root": "<GENESIS_VALIDATOR_ROOT>"}'

[Example: withdrawal-mainnet-shadowfork-1]

--devnet_chain_setting='{"network_name": "withdrawal-msf-1", "genesis_fork_version": "0x10000043", "genesis_validator_root": "0xe9ec351d158fd3b89b6afd2e6033bcae8d8adc2dd4c560c4bbf852d47ed0410e"}'

Expected outputs

**[Warning] you are setting an Eth1 address as your withdrawal address. Please ensure that you have control over this address.**


**[Warning] Using devnet chain setting to generate the SignedBLSToExecutionChange.**

Verifying your BLSToExecutionChange file:	  [####################################]  N/N

Success!
Your SignedBLSToExecutionChange JSON file can be found at: /.../staking-deposit-cli/bls_to_execution_changes


Press any key.

You can find the bls_to_execution_changes-*.json file in the ./bls_to_execution_changes folder by default.

Upload to Beacon Node BLSToExecutionChange pool

curl -X POST -H “Content-Type: application/json” -d @<@FILENAME DESTINATION> \
http://<BEACON_NODE_HTTP_API_URL>/eth/v1/beacon/pool/bls_to_execution_changes