January 8, 2022

SSV

Децентрализованная сеть для стейкинга ETH

Требования к серверу

Минимальные (VPS/VDS/DS): 4 CPU, 8 GB RAM, 50+ GB HDD/SSD, Ubuntu 20.04 
Рекомендуемые (VPS/VDS/DS): нет данных

Я взял на Zomro сервер, который изначально планировал использовать под Massa из предыдущих гайдов.

Где взять сервер?

Zomro: https://zomro.com/?from=325249 либо по промокоду zomro_325249
(Дадут скидку 20% на первый заказ)

Ноду лучше не подселять к массе, т.к. SSV потребляет примерно 15-30% мощности, но Вам никто не запретит, однако я врядли смогу быстро и оперативно помочь Вам в случае каких либо проблем, т.к. сам делал на отдельном сервере.

Награды

Обещают раздать пул в 32000 SSV токенов(1 ssv ~ 9-10$ на момент написания статьи), однако цифра может измениться.

Оплачиваемый тестнет стартует 12 января 2022г.

Сколько он продлится, пока неизвестно.

Как будет точная информация, гайд будет дополнен.

Подключение сети Goerli в Metamask

Необходимо подключиться к сети Goerli в Вашем кошельке Metamask

Для удобства выписываю данные ниже:

  • Имя: Goerli
  • RPC: https://rpc.goerli.mudit.blog/
  • ID цепочки: 5
  • Символ валюты ETH, либо gEth(как хотите, можете хоть битками или фантиками назвать, но у меня ETH)
  • URL адрес проводника: https://goerli.etherscan.io/

Запрос тестовых токенов

Пока временно недоступен

Но скорее всего 10-11 числа токены можно будет запросить в дискорд сервере SSV https://discord.gg/ssvnetwork
в разделе #Goerli-Requests либо через тикеты на сервере.

Ожидаем.

Установка и настройка

1. Установка зависимостей

Необходимо установить зависимости для установки оператора, для этого выполните следующие команды:

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. Установка оператора

2.1. Генерация ключей

Для оператора необходимо сгенерировать ключи, для этого выполните команду (скопируйте нижний блок целиком и вставьте в консоль):

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

Вы должны увидеть примерно такой вывод:

Верхний ключ – публичный, нижний – приватный. Сохраните эти ключи.

2.2. Получение эндпоинтов

Для оператора мы будем использовать ноды, которые предоставляет сервис Infura, для этого зарегистрируйтесь на сайте infura.io и найдите эндпоинты в своем личном кабинете:

  • Создаем новый проект
  • Выбираем Etherium и вводим названия проекта, например SSV_ETH(можете указать свое)

Выбираем в ENDPOINTS "Gorli" и копируйте нижнее значение (wss):

Копируем и сохраняем в блокнот

Далее проделайте то же самое для получение Beacon ноды ETH2:

В ENDPOINTS выбираем "Prater" и копируем адрес с HTTPS.

Не перепутайте!!! Нужен HTTPS, а не WSS

Сохраните адреса этих эндпоинтов.

2.3. Создание конфигурационного файла

Для создания конфигурационного файла выполните команды ниже, предварительно заменив <YOUR_BEACON_ETH2_ENDPOINT>, <YOUR_WSS_GOERLI_ETH_ENDPOINT> и <YOUR_PRIVATE_KEY_FROM_2.1> на ваши значения:

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>"

Пример полной команды:

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 "https://LKDSGHLh21o33lhjg:l3j5903252398hkj23jk@eth2-beacon-prater.infura.io" \
&& 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=="

Не нужно пытаться вводить команду выше, она дана исключительно для примера.

Пример на скриншоте, как собрал команду я:

Далее копируем нашу команду на сервере и вводим ее на сервере(правая кнопка мыши для вставки)

2.4. Запуск оператора

Выполните команду ниже:

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

Проверьте логи:

docker logs ssv_node --follow --tail=50

Должно быть примерно так:

Наличие "WARN"-ов — это нормально. Проигнорируем этот момент. В будущем с обновлениями будет всё ок.

2.5 Регистрация оператора

Официальная документация

Кстати сайт где мы будем регистрироваться, у меня почему то "глючит", надеюсь у вас будет всё ок.

Для регистрации перейдите на сайт приложения SSV, нажмите Connect Wallet, затем Join as operator:

Заполните форму оператора, для этого вам потребуется публичный ключ из пункта 2.1:

Перепроверьте данные и если все верно нажмите Register Operator:

После этого должно появиться окно вашего кошелька с просьбой подтвердить транзакцию, подтвердите. Затем вы должны увидеть такое окно:

Теперь вы оператор SSV Network!

3. Валидатор ETH2

3.1. Регистрация валидатора

Создайте валидатора через Ethereum Launchpad, для этого следуйте действиям на скриншотах:

Выбираем Geth и внизу жмем продолжить.

Также выбираем Prysm и жмем продолжить

Далее вводим количество валидаторов: 1

Прокручиваем вниз, жмем галочку и далее

Вам нужно иметь 32+ ETH в сети Goerli для создания валидатора.

Теперь нам нужно сгенерировать ключи и сохранить их к себе на ПК, для этого воспользуйтесь FTP утилитами (WinSCP/Filezilla/Mobaxterm (Windows), Filezilla/Cyberduck (MacOS) или любыми другими на ваше усмотрение). Выполните команды ниже для генерации ключей и следуйте скриншотам:

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
  • Выберите язык (или просто нажмите Enter если хотите оставить английский), введите желаемый пароль, повторите пароль:
  • Сохраните мнемонику:

Я выделил и нажал Ctrl+C на Windows.

  • Введите сохраненную мнемонику
  • Дождитесь генерации ключа, нажмите любую клавишу для выхода:

Запомните путь к папке с вашими ключами, в нашем случае это /root/validator_keys.

Продолжите регистрацию через Ethereum Launchpad, следуйте скриншотам:

Загрузите сюда файл deposit-data-[timestamp].json (где [timestamp] – время создания файла в формате timestamp), он расположен в папке validator_keys, которую вы сохраняли выше. После этого нажмите Continue, подключите кошелек и продолжите регистрацию.

4. Запуск SSV валидатора

Перейдите в приложение SSV, подключите кошелек, нажмите Run validator и следуйте скриншотам:

Загрузите keystore файл из папки validator_keys, которую сохраняли ранее и введите пароль, который также вводили ранее при генерации файлов:

Выберите четырех операторов (не забудьте выбрать своего оператора, мой оператор – MrNix0n; для удобства поиска жмите на выпадающий список и используйте CTRL+F или command+F, далее вводите название оператора)

Сверху указал моего активного оператора, проверяйте адрес(начало и конец) если будете выбирать меня. Также рекомендую выбирать проверенных(верифицированных операторов)

Подтвердите, что ознакомлены с механизмом слешинга:

и не забудьте скопировать адрес валидатора, он нам понадобится

Перепроверьте данные и нажмите Run validator:

Подтвердите транзакцию в вашем кошельке и ожидайте подтверждения:

После этого выбранные вами операторы начнут работать с вашим валидатором в следующих эпохах.

Как проверить что всё хорошо и узнать эффективность своей ноды

Необходимо перейти по ссылке

https://prater.beaconcha.in/validator/Адрес_вашего_валидатора

Для примера, моя нода:

https://prater.beaconcha.in/validator/95a8d7d6a0d9c0d2b09962e5bdf21be98d96c50b8172acea2d9b3e9eb9131c68dadebf14646e442d02426d78c51e4945#deposits

Так выглядит моя статистика.

К сожалению, по ошибке дважды отправил себе 32 eth. Если статистика не будет исправляться или техподдержка не скажет что всё ок, то буду запускать другую ноду.

Что хорошо?

В следующих значениях нам желательно видеть цифру больше 80%

Дополнительно

Обновление оператора:

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

Посмотреть логи:

docker logs ssv_node --follow --tail=50