Step 2: Create a directory containing keys to split
Copy the existing validator keystore.json files into this new folder. Alongside them, with a matching filename but ending with .txt should be the password to the keystore. E.g., keystore-0.jsonkeystore-0.txt. These matching .txt files can be generated with a bash script.
At the start of this process, you should have a file tree that looks something like this.
#!/bin/bash# Get the input string (password) from the userecho"Enter the string (password) to be used in all the .txt files:"readinput_string# Iterate through all .json files in the directoryfor file in*.json; do# Check if the file is a regular file (not a directory)if [[ -f"$file" ]]; then# Get the file name without the extension filename="${file%.*}"# Create a .txt file with the same name and add the input string to itecho"$input_string">"${filename}.txt"fidone
Save this script and make it executable.
chmod+xgenerate_txt_files.sh
Run the script.
./generate_txt_files.sh
At the end of this process, you should have a tree like this.
CHARON_VERSION=# E.g. v0.16.0NETWORK=# E.g. goerliCLUSTER_NAME=# E.g. EtherfiSoloStakerWITHDRAWAL_ADDRESS=# Set withdrawal addressFEE_RECIPIENT_ADDRESS=# Set fee recipient addressTHRESHOLD=# E.g. 3NODES=# E.g. 4 docker run --rm -v $(pwd):/opt/charon obolnetwork/charon:${CHARON_VERSION} create cluster --name="${CLUSTER_NAME}" --network="${NETWORK}" --withdrawal-addresses="${WITHDRAWAL_ADDRESS}" --fee-recipient-addresses="${FEE_RECIPIENT_ADDRESS}" --split-existing-keys --split-keys-dir=/opt/charon/split_keys --threshold ${THRESHOLD} --nodes ${NODES}
In the .charon directory there will now be a cluster directory containing sub-directories, each named node0, node1, etc.
I can't see the .charon directory?! 👀
On most filesystems, files and directories that start with a . are hidden by default.
On a Unix system (Mac or Linux) on the command line you can see hidden files and directories using the -a flag for the ls command:
ls -la
.charon/cluster/
├─ node[0-*]/ Directory for each node
├─ charon-enr-private-key Charon networking private key for node authentication
├─ cluster-lock.json Cluster lock defines the cluster lock file which is signed by all nodes
├─ deposit-data.json Deposit data file is used to activate a Distributed Validator on DV Launchpad
├─ validator_keys Validator keystores and password
├─ keystore-*.json Validator private share key for duty signing
├─ keystore-*.txt Keystore password files for keystore-*.json
Each solo staker participate will receive one of these directories in a compressed format. The exact format depends on the machine being used. The file formats needed for Avado and Dappnode machines are slightly different and are explained below.
Avado requires the files to be uploaded in a .zip format.
Make sure you are in the .charon/cluster/ directory with all the node* directories.
For each node directory, compress the folder using the following command:
zip-rnode0.zipnode0
Dappnode requires the files to be uploaded in a .tar.xz format.
Make sure you are in the .charon/cluster/ directory with all the node* directories.
For each node directory, compress the folder using the following command: