Rent server onSponsored
1. Install dependencies
It is necessary to set the dependencies for the SSV operator installation, to do this run the following commands:
cd $HOME
wget -q -O $HOME/install.sh https://raw.githubusercontent.com/bloxapp/ssv/main/install.sh
chmod +x $HOME/install.sh
./install.sh
2. Install the operator
2.1. Key generation
For the operator it is necessary to generate the keys, to do this run the command (copy the whole lower block and paste into the console):
docker run -d --name=ssv_node_op_key -it 'bloxstaking/ssv-node:latest' \
/go/bin/ssvnode generate-operator-keys && docker logs ssv_node_op_key --follow \
&& docker stop ssv_node_op_key && docker rm ssv_node_op_key
You should see something like the following:
The upper key is public, the lower one is private. Save these keys.
2.2. Endpoints
For the operator, we will use the nodes provided by the service Infura, to do this, register at infura.io and find the endpoints in your dashboard:
Copy the lower value (wss):
We also need to install the Beacon prater node, due to the disabling of this endpoint by Infura, we have to run it on our own server, it is recommended to install it on a server with a disk size of at least 1TB.
Use our script for a quick installation:
wget -q -O beacon-prater.sh https://api.nodes.guru/beacon-prater.sh && chmod +x beacon-prater.sh && sudo /bin/bash beacon-prater.sh
Save the addresses of these endpoints.
2.3. Config
To create a configuration file, run the commands below (replacing <YOUR_HTTPS_BEACON_ETH2_ENDPOIN>, <YOUR_WSS_GOERLI_ETH_ENDPOINT> and <YOUR_PRIVATE_KEY_FROM_2.1> with your values):
export SSV_DB=$HOME/.ssv
mkdir -p $SSV_DB
yq n db.Path "$SSV_DB" | tee $SSV_DB/config.yaml \
&& yq w -i $SSV_DB/config.yaml eth2.Network "prater" \
&& yq w -i $SSV_DB/config.yaml eth2.BeaconNodeAddr "YOUR_HTTPS_BEACON_ETH2_ENDPOINT" \
&& yq w -i $SSV_DB/config.yaml eth1.ETH1Addr "YOUR_WSS_GOERLI_ETH_ENDPOINT" \
&& yq w -i $SSV_DB/config.yaml OperatorPrivateKey "YOUR_PRIVATE_KEY_FROM_2.1" \
&& yq w -i $SSV_DB/config.yaml MetricsAPIPort "15000"
Example of a complete command:
export SSV_DB=$HOME/.ssv
mkdir -p $SSV_DB
yq n db.Path "$SSV_DB" | tee $SSV_DB/config.yaml \
&& yq w -i $SSV_DB/config.yaml eth2.Network "prater" \
&& yq w -i $SSV_DB/config.yaml eth2.BeaconNodeAddr "http://135.181.205.9:5052" \
&& yq w -i $SSV_DB/config.yaml eth1.ETH1Addr "wss://goerli.infura.io/ws/v3/32240b05234QW30b0c95992aa2ea9fd" \
&& yq w -i $SSV_DB/config.yaml OperatorPrivateKey "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBMGhsasdasR1FaWXFwSitCbHVYbnJ6WlltSTFSTldsNW9KMTlKeXB5MlE4ClFRS1hQVno5Q2VwYVljNUFLeW54VmSADQVhYSTU1L2xSVnZMNzNpNlVJenhuMGd5TFJwSzFSSG1lcXcKSGIwNnpqU1ZmeW92aWp5OG1ZNXJKOGhkaHVPT283UjltZm5zUmFiMzM2alVZckRpZVJBNFU3UVdGbzhaZ1U4TAo1MnhNVlM1clNvNWp1QTcvV2IwWDdQVUMwYTVwdURKMi9lYUNjUmtwTTEyaE5qemRrZ3NIRjdrWGV2dnNLaGQyCjZCSEx0L0FoT0JVVGNjc0wxd2d3anZhbGRuVlF6cEczdjFxeUJCbHVsTlRDeG9Bb0I3eEw1WHlYaGVhNFFEM3MKVFhmdXVLTDNaMjFHMDFaclVBNGhVZE9KOC9qS0RUcnlNTmQwR1FJREFRQUJBb0lCQUFsL3NuMnZWbk5qY3ZCKwpzL1dLUi81Ymw4QktnMzJLT1NSU2tIeWFlMkRDMEg1c21yakp1RExEQ0lHeFFjTFlRMWh3UGdRRWhjNkgyYTIrCndZcFB1Uzd4V0NTTmJqdmpqVm0xQUkxeWNxck4xYXJrekcrYnhaUGJGc000RWd3cThNLzBlMjNDQmxCNTYxSUYKY0FSTkkxeUd6d0FpcnUrRFZjbnBiTktEK3Rlc0xZYVhJYlpkMXB6L3ZZSnJ5c0RpUXhnZjFsZGZ3VGV3aDVnUAo2eW9mYTVzcGt5eURPckF0UDhsRmg1cmRpZHVXOXRaaHJpZGxQNkd6a1YxV1gvR1N6djd5MWVZSjVGVElRNXd6CkJ3b2NrUksxYmk0RFNIZWFhMUxwQ3VJczE5M1NWNnc5bUR0cW02cG5ZWGNxY2Zqemc1MTRmWUt0YWxVbVkvTXEKQWRVTm5HMENnWUVBLzEyeG4vTk9zc3cveE81SktFNmtrUFhJcG1ENjZNWHZKeEtOaGVWNHBLUm93YS9jWlVEYwpBQk95SkJvQVZKSlM1ZE5SMG1LVFpIY2FDMDdFYlg1WHNuYUVxQ2k0WDJScmxDdjQvMVNLcUVuTWs2SHd0Z2tECitlajBZWWpEZldjWk5QMitQbEZBRS9Kd1VVcUcyNERIUG4vY0Vob3JmaUdPVmdpWWhxbFN5Z01DZ1lFQTBwN3YKajVmaFlhWWF3WG5LOW1nMGJ3eGFMbVdGYVg2WDFvTElBQW56TkEvT0x0UVVodXJ0OVRWUUZheFNVUEFGQUxGeQpPTEJtTlpRRmJTNjNSQkRDMzVOVXQ4SENBQWR5S01ROHIxVlZWZWhrekNMamZXb0lsYThmTWpvdjVaNWxXL3Y1ClgvZE9xQ1MyMmJ0ekpyQUFPT2tSdjNUcmI3eVVzWktYY3B2ZXZMTUNnWUVBdERxK1dITnlRY0xoNXUxK2VKSTQKbDQ3QWxKeXh1WU9wTEZ4dHdlaVk0eXFlUE1VUHVlNnkxdU1Qd1djUWdKL2RIaE90RmQwNHhabEJxbVZuUVJnQQpjUll3dmpZdkdqUlhzUFh3QU5UOEg1WW1hclBLbmM5ekhQaUxNaU5DUmNsMEF2QnJTclF4azJKeVh3MUliTGRRCjZBMTVsdFVkaVNISndYTERvNWJ4dFYwQ2dZQm5RSU13WWNTYm1sS0RockY1R3B5WjAvUmh5bU1jMUhLYk5vSFYKZ3dzMitvaVpiRjZqeFlmaUxjQ1UzMlY3U0M4cnA5SFcrS01pb080SUdGNi9mM2dKSXJEbFpKYzJiSEFLakNregp5eUdLZStMdU1DeFZ6eVZtTy9PUEsvZFBHZGVXd0hBQUc3enpzUXZ5c1hKQ0JRWVc0Q3RUTUg0NnlMZ2NWVURwCmJvQkRBUUtCZ1FEQlgrTnhWTURFMU5hWWRyUStZYm9ZREV0K0VoanVSbGczV1lXdkNDbk9hbktLV2cvMzVNY3MKNlQvc3Q2VVBKbDlSZmRwN2ZWbXQyek81QUEvUHB4Qi95K2ZIaTlQdTVJZFRRcWxaNFBMcDVFVzRwSksyZ0h3Rgo4ekllTU1WYXVpOXlzb09helpQditmMy9YVHM3MW0zSTBEY1ZveU1saEthYkw2R3RNRzBHbXc9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo" \
&& yq w -i $SSV_DB/config.yaml MetricsAPIPort "15000"
2.4. Start operator
Execute the command below:
docker run -d --restart unless-stopped --name=ssv_node -e \
CONFIG_PATH=./config.yaml -p 13001:13001 -p 12001:12001 -v \
$SSV_DB/config.yaml:/config.yaml -v $SSV_DB:/data -it \
'bloxstaking/ssv-node:latest' make BUILD_PATH=/go/bin/ssvnode start-node
Check the logs:
docker logs ssv_node --follow --tail=50
2.5 Register operator
You will need ETH coins in the Goerli test network to register operator, the faucet available here.
To sign up, go to the SSV application website, click Connect Wallet, then Join as operator:
Fill out the operator form, for this you will need the public key from 2.1:
Double-check the data and if everything is correct press Register Operator:
After that, your wallet window should appear asking you to confirm the transaction, confirm it. Click Manage Operator to view your operator information.
You are now an SSV Network operator!
3. ETH2 Validator
3.1. Register a validator
The faucet is available in discord, deposit-bot section
Create a validator via Ethereum Launchpad, follow the steps in the screenshots:
Now we need to generate keys and save them to your PC, use FTP utilities (WinSCP (Windows), Cyberduck (MacOS) or any others at your choice). Run the commands below to generate the keys and follow the screenshots:
cd $HOME
wget -O staking_deposit-cli-76ed782-linux-amd64.tar.gz https://github.com/ethereum/staking-deposit-cli/releases/download/v2.3.0/staking_deposit-cli-76ed782-linux-amd64.tar.gz
tar xvf staking_deposit-cli-76ed782-linux-amd64.tar.gz
mv ~/staking_deposit-cli-76ed782-linux-amd64/deposit /usr/local/bin/
deposit new-mnemonic --num_validators 1 --chain goerli
Select the language (or just press Enter if you want to keep English), enter the password, and repeat the password:
Save the mnemonics:
Enter the saved mnemonic:
Wait for the key to be generated, press any key to exit:
Remember the path to your keys folder, in our case it is /root/validator_keys.
Continue registration through Ethereum Launchpad, follow the screenshots:
Upload the file deposit-data-[timestamp].json (where [timestamp] is the time the file was created in timestamp format) here, it is located in the validator_keys folder that you saved above. After that, click Continue.
Select the metamask, you must have the Goerli test network active.
Right-click on Continue and select view code, change disabled to enabled as shown above.
Check all the boxes and click Continue.
Press Send Deposit, choose HEX in the metamask and copy the hex data, we need it to get ETH.
Go to the discord section deposit-bot and follow the bot instructions. After the bot completes transaction, simply close the metamask window and skip to step 4.
4. Start SSV validator
Go to SSV application, connect the wallet, click Run validator and follow the screenshots:
Upload keystore file from validator_keys folder:
Enter the password you set for the key:
Select four operators (one operator should be yours, our operator is NodesGuru):
Confirm that you are familiar with the slashing mechanism:
Double-check the data and click Run validator:
Confirm the transaction in your wallet and wait for confirmation:
The operators you select will then start working with your validator in the upcoming epochs.
Additional
Operator update:
export SSV_DB=$HOME/.ssv
docker rm -f ssv_node
docker pull bloxstaking/ssv-node:latest
docker run -d --restart unless-stopped --name=ssv_node -e \
CONFIG_PATH=./config.yaml -p 13001:13001 -p 12001:12001 -v \
$SSV_DB/config.yaml:/config.yaml -v $SSV_DB:/data -it \
'bloxstaking/ssv-node:latest' make BUILD_PATH=/go/bin/ssvnode start-node
Check the logs:
docker logs ssv_node --follow --tail=50