Nodes

guruGuru
search

SSV - Setup Guide

Back to projectRU
Stuck? AsktelegramNodes Guru telegram community

Rent on

The official instructions are available here.

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:

SSV-1

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:

SSV-4

Copy the lower value (wss):

SSV-5

Then do the same for the Beacon ETH2 node:

SSV-7

Save the addresses of these endpoints.

2.3. Config

To create a configuration file, run the commands below (replacing <YOUR_BEACON_ETH2_ENDPOINT>, <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_BEACON_ETH2_ENDPOINT>" \
&& yq w -i $SSV_DB/config.yaml eth1.ETH1Addr "<YOUR_WSS_GOERLI_ETH_ENDPOINT>" \
&& yq w -i $SSV_DB/config.yaml eth1.RegistryContractAddr "0x687fb596F3892904F879118e2113e1EEe8746C2E" \
&& yq w -i $SSV_DB/config.yaml MetricsAPIPort "15000" \
&& yq w -i $SSV_DB/config.yaml OperatorPrivateKey "<YOUR_PRIVATE_KEY_FROM_2.1>"

Example of a complete command:

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 "https://LKDSGHLh21o33lhjg:[email protected]" \
&& yq w -i $SSV_DB/config.yaml eth1.ETH1Addr "wss://goerli.infura.io/ws/v3/1clkdfoippo453j" \
&& yq w -i $SSV_DB/config.yaml eth1.RegistryContractAddr "0x687fb596F3892904F879118e2113e1EEe8746C2E" \
&& yq w -i $SSV_DB/config.yaml MetricsAPIPort "15000" \
&& yq w -i $SSV_DB/config.yaml OperatorPrivateKey "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBenZDNW9Wb3NtTDhzMUtUM1lvc2Z1bVlTVkRUN0tVS0ZMMmJqYTM3b3N5QlRLdGM3ClJCQUZBK0JPSHpTbU45SFZBUHIzQmR2bFRodXh3cnN0OEJheHNObFNWb0xRRlhRazBVTnNCMk04OGtJbWJ3azAKMlo3U3JRMGl3RURDODcyTUoxcjNjRHI4aXR1UUk2RURJRnVXSzJNM1hrMWhIS1V3MGliOFg0MUlFY29rK1NzLwpSTHBjaVBzT2FLem5WRnFnNEp6dk1ISnFkY3c0eEN5UVRyM2twc0JobktNMWd5Z2RSTm54VzlLck1WNW1hNEhpCmhsd1NvM0l6OEdZRjZaYjBTT2VMT3VlZ2JWRFk1aWtQd21XTXdEMVdaY09jbWhMN3gvMXlReWxzY0p2SkhXK1YKRW9wbUFJU3BuZ0JpZ0o4RTJmTWNEaEpwL3hkRFpsTXRnQ0xOc3dJREFRQUJBb0lCQUczdmRLNURPVzNzSWVUVgp2cGFiVWoreitnakNIS3ZPcXZLRHRrMWxIam9LOGlQUU02djAxclU0ZEVnZnNDMzNTekU2SWdENjBOYXQzOEdUCnJ0UGRPb2k0NndVS2VZRHNNcUw1TG1xK1RhSmxnZ1Y2M3BpOXh5NG56RTVXR1R0amR4RnhRZ0pkVTh4dzJDSVYKWjVQSkUvMzR0M0ZocWpXTmpHSVlVL3B2RTlwZWs5RFovT2FTRFJ6QlRoRDdHSUlBcVFIbHVuekM2Wi9VQ0xhcwpFV1FvOWFBUHFCL2lzZXY3ODhYczZCYXAraVNQNkZVUFVjMk9HSEhiNnVrQkpqcklGc0MvdU1wZ1NsOWt3MUtaClprMVc2ME8yTldPc2xXNzdHOHhsWW1uT0NZZWZ2Z0hCbFo0djRJdlh5Z2RoaHpuWnBObFBieWgzMGdyQmhQRTYKTExaWXdBRUNnWUVBK3RXRTRHOUVhZUo5eDVPZnZyNmFMZ0FpVTExekszaEpwdXRSVUtCWkdBdUZCTHZYR1BWSgoxS24rSFpzT3N2bUJKbW5TbVhQdGNLOE1ZUS9MN29FMHhiRy9ZZmFUalFDUU9ReTl6enVIbmNTbVVwRkdBKzlLCjdISncyeTlmZzhmVFhwMkp1SXpzRFJDZitrSVg0VEd0bGxncjdPcFBEeUw5dVNQNWRrTTJBZ2NDZ1lFQTB6UEkKbjB6aFZTRTA5am9wRnJsVTFwOXQ3ZXh0alZLMEoycFp4eGRnWDlXTHhmQzN2c3lXL2NTQU1kZ3BmanFkSjd3WgpXa1Y5NGZSN3V0ZFdOdmVTaGc0TTZpSkMrMjFZMXZpOHQwMEJTRExmaVVscTB0RS9ncEszaWtKOXhFUEdCWXdpCjNiTTVwcDJZd215SGROOHNCNHRHcHJxSkN0ZEFBMHc5UXFWYSsvVUNnWUJOaFB1QjJTRk5qLy9MVkNaRWJ1ZDcKVy9NL3pGdXhqWVZGbnVnTWdPSEgrcGRyZFJudXpxKzRsNmkvUVpKellZUzJlSEhybHRaRXd2U1NjcTFWMG55YQp0R292UG1NdmFvTW4vbllTdTVVWC94UmY1Q0c5U1pEZ0xpWU90ejlQbk13SUs2dkthMUx3WHJqeVFNYmNnOXZmCjRQUUNUZytNNEFXRjJFWmFkRDhXdFFLQmdDd2YyWDVPbFpVdmh0MGFjWk1welN1NXkwRzE3MzFqRmZoV0k4T1EKZ3JZQzYxekRXZUFtNWpUR1pQSUU4MFpJQUtWWWl3TnRHVXVueEdIWXMwNXdrdEFuQjFPekxNTlNxUWpnbHF6RgpEY3VEdFdmOVNyQVl2MmdNTndSUHQrN1ZLZjNtdFRJVVM2c2ZxZGFVemdnQXlEWWJSdnQyWlVNNmpVa2pHSGxnCkNvNHhBb0dBTGVwaTIzdDJwbUo2Yk9WWFEwUCtjNGFlbDVRQXcrL3FPdFZyclJ6eUFuNGlLTlREczNIdGJ2M3cKWEFWSWtmQzVaa21Qc21pVTBMSVU3aXkwOW15QVBLc3JwbTM5OWt2ZUhXSEdjY29ENjQ5d0g4Z0c2TGRJUTB4UwpEc0lHNk9HVW1vVTNySjRtbmNIaS9kQVVCNzJlRUlnNksyeUIyeTRIYnR4Q0dlYnlMeWc9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg=="
No need to try to enter the command above, it is given for example only.

2.4. Start operator

Execute the command below:

docker run -d --restart unless-stopped --name=ssv_node -e \
CONFIG_PATH=./config.yaml -p 13000:13000 -p 12000:12000 -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

Should be like the following:
SSV-8

2.5 Register operator

The screenshots are from official documentation.

To sign up, go to the SSV application website, click Connect Wallet, then Join as operator:

SSV-9

Fill out the operator form, for this you will need the public key from 2.1:

SSV-10

Double-check the data and if everything is correct press Register Operator:

SSV-11

After that, your wallet window should appear asking you to confirm the transaction, confirm it. Then you should see a window like this:

SSV-12

You are now an SSV Network operator!

3. ETH2 Validator

3.1. Register a validator

Create a validator via Ethereum Launchpad, follow the steps in the screenshots:

SSV-13

SSV-14

SSV-15

You must have 32+ ETH in the Goerli network to create a validator.

SSV-16

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 -q -O $HOME/eth2deposit-cli-256ea21-linux-amd64.tar.gz https://github.com/ethereum/eth2.0-deposit-cli/releases/download/v1.2.0/eth2deposit-cli-256ea21-linux-amd64.tar.gz
tar -xzf $HOME/eth2deposit-cli-256ea21-linux-amd64.tar.gz
$HOME/eth2deposit-cli-256ea21-linux-amd64/deposit new-mnemonic --num_validators 1 --chain prater

Select the language (or just press Enter if you want to keep English), enter the password, and repeat the password:

SSV-17

Save the mnemonics:

SSV-18

Enter the saved mnemonic:

SSV-19

Wait for the key to be generated, press any key to exit:

SSV-20

Remember the path to your keys folder, in our case it is /root/eth2deposit-cli-256ea21-linux-amd64/validator_keys.

Continue registration through Ethereum Launchpad, follow the screenshots:

SSV-21

SSV-22

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, connect the wallet and continue the registration.

4. Start SSV validator

The screenshots are from official documentation.

Go to SSV application, connect the wallet, click Run validator and follow the screenshots:

SSV-24

SSV-25

Upload keystore file from validator_keys folder:

SSV-26

Enter the password you set for the key:

SSV-27

Select four operators (one operator should be yours, our operator is NodesGuru):

SSV-32

Confirm that you are familiar with the slashing mechanism:

SSV-29

Double-check the data and click Run validator:

SSV-30

Confirm the transaction in your wallet and wait for confirmation:

SSV-31

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 13000:13000 -p 12000:12000 -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