# Полезное для валидаторов Solana

By [inextremo.eth (💙,🧡) 🛸](https://paragraph.com/@inextremo) · 2022-08-17

---

**ПОЛЕЗНЫЕ ССЫЛКИ**

[**Official FAQ**](http://193.70.40.218/#_mainnet) - официальная инструкция по установке, настройке и т.д.

[**Видео от @diman\_io**](https://www.youtube.com/channel/UCOmT4j8tfhBnR79PlsQ_fRg) - серия видео где также есть ответы на большинство частых вопросов, новичкам рекомендован к просмотру весь плейлист

[**Видео от @Abezyan**](https://www.youtube.com/channel/UC5WvrOb9XPHX_CUBXfL9aBQ) - серия видео по тонкой настройке железа и софта, особенно актуально на сегодня [видео по селф-стейку](https://www.youtube.com/watch?v=PJupdiya214)

[**Ресурс от @XuengChang**](https://solanatools.xyz/useful.html) с полезными тулзами, в том числе мониторинг очереди в тестнет

[**Группа в Телеграм для новичков**](https://t.me/joinchat/kqr_VYyhsMZkY2Ni)

[**Группа в Телеграм для опытных**](https://t.me/joinchat/UsMpWZiiAPos7kB0) и тех, кто стремится таковыми стать ;)

**ЖЕЛЕЗО**

**Посмотреть загрузку каждого ядра процессора**

`watch -n 1 "grep 'cpu MHz' /proc/cpuinfo"`

**Бенчмарк сетевого соединения**

Один попроще

`apt install speedtest-cli -y`

затем

`speedtest`

Второй поинформативнее

если нету curl, то сначала

`sudo apt install curl -y`

а затем

`curl -sL yabs.sh | bash -s -- -fg`

**Бенчмарк дисков и сети вместе**

`curl -sL yabs.sh | bash -s — -ig`

**Проверка диска**

`sudo apt install nvme-cli -y nvme smart-log /dev/nvme0`

**Проверить свободное место на диске**

Частая причина ошибок в работе сервера, особенно когда забыли настроить ротацию логов. Выполняем

`df -h`

ищем что-то вроде такой строчки, там указан процент использования диска

`/dev/sda1 38G 12G 24G 33% /`

**Проверяем износ дисков**

`sudo apt install smartmontools smartctl -a /dev/nvme0`

**Настраиваем TRIM**

По умолчанию TRIM делается раз в неделю, для соланы этого недостаточно. Можно изменить расписание трим так:

`systemctl edit fstrim.timer`

и дописываем, например, чтобы раз в сутки делало :

`[Timer] OnCalendar=daily`

или еще чаще, например, раз в 6 часов:

`[Timer] OnCalendar=0/6:00:00`

**Мониторинг памяти, процессоров и др. в графическом виде**

`sudo apt install htop -y`

`htop`

**Разгон процессора**

`watch "grep 'cpu MHz' /proc/cpuinfo"`

смотрим в реальном времени частоту каждого ядра

`cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor`

проверяем режим работы процессора, обычно статусы power save (экономия электроэнергии), on demand (по запросу) и performance (высокая производительность), крайний вариант предпочтителен.

`for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo performance > $i; done`

прописываем `perfomance` или `ondemand`

первый всегда будет как следует прожаривать ваш камень, второй будет делать это только тогда, когда этого будет требовать установленный на вашем сервере софт.

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

**SOLANA**

НЕДАВНО ДОБАВЛЕННЫЕ И ОСОБЕННО АКТУАЛЬНЫЕ КОМАНДЫ ИЩЕМ ВВЕРХУ

**Кредитс**

Кроме скипрейта важно контролировать как ваша нода голосует

`solana validators -ul --sort=credits -r -n | sed -n 1,101p && solana validators -ul --sort=credits -r -n | grep -e ВАШ АЙДЕНТИТИ`

команда покажет топ-100 по кредитсам и место, которое занимает ваша нода, если ниже 500, то стоит проанализировать что еще можно улучшить, в первую очередь обычно поменять слабое железо на более мощное ну и так далее :) Можете также дописать в конце сколько угодно других айдентити через -e и таким образом будете видеть например успехи ваших гуру :)

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

`tail -f /root/solana.log`

**Средний скип по кластеру**

`solana validators -ul | grep "Average Stake-Weighted Skip Rate" | awk '{print $5}'`

или

`sudo apt install jq -y`

`solana validators -ut --output json-compact | jq .averageSkipRate`

**Проверка состояния ноды**

`solana catchup solana address http://127.0.0.1:8899`

либо

`solana-validator monitor`

либо

`solana catchup --our-localhost --follow --log`

**Правильная перезагрузка ноды с удалением леджера**

`systemctl stop solana rm -rf ledger systemctl start solana`

то же самое с физической перезагрузкой сервера

`systemctl stop solana rm -rf ledger reboot`

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

`systemctl start solana`

**Правильный перезапуск сервиса с сохранением леджера**

`solana-validator --ledger /root/ledger wait-for-restart-window && systemctl restart solana`

В результате рестарт будет выполнен автоматически в "окно" между слотами, таким образом потенциально снижаем свой скипрейт. Обычно занимает около 10 минут. Ниже еще один вариант, но уже ищет "окно" для перезапуска в 30 минут вместо стандартных 10 и плюс логи.

`solana-validator --ledger ~/solana/ledger wait-for-restart-window 30 && systemctl restart solana && tail -f solana.log`

**Правильное обновление ноды**

Прописываем сюда вместо 1.7.10 номер актуальной версии, на которую обновляемся

`solana-install init 1.7.10`

Если не тюнили систему вручную то прописываем автоматический тюнинг

`sudo solana-sys-tuner --user $(whoami) > sys-tuner.log 2>&1 &`

И далее

`solana-validator --ledger /ledger wait-for-restart-window && systemctl restart solana`

В результате рестарт будет выполнен автоматически в "окно" между слотами, таким образом потенциально снижаем свой скипрейт. Обычно занимает около 10 минут. После рестарта проверяем версию, должна быть актуальная

`solana --version`

**Посмотреть сколько слотов в эпоху назначено ботом**

`solana leader-schedule | grep $(solana address) | wc -l`

**Посмотреть сколько слотов произведено успешно/пропущено**

`solana -v block-production | grep СЮДА ВПИСЫВАЕМ СВОЙ АДРЕС`

**Информация о валидаторе**

`solana validators | grep СЮДА ВПИСЫВАЕМ СВОЙ АДРЕС`

**Отправить токены соланы на внешний нативный адрес**

`solana transfer --from mainnet-validator-keypair.json СЮДА ВПИСЫВАЕМ АДРЕС ПОЛУЧАТЕЛЯ 0.1 --fee-payer mainnet-validator-keypair.json`

**Вывод наград с воут-аккаунта**

`solana withdraw-from-vote-account <VOTE_ACCOUNT_ADDRESS> <RECIPIENT_ADDRESS> <AMOUNT>`

**Опубликовать информацию о себе**

`solana validator-info publish ИМЯ НОДЫ -n ИМЯ В KEYBASE -w https://ВАША СТРАНИЦА--details РАССКАЖИТЕ О ТОМ ПОЧЕМУ ВАМ СТОИТ ДЕЛЕГИРОВАТЬ ИЛИ ЕЩЕ ЧТО-НИБУДЬ :)`

пример

`solana validator-info publish in_extremo -n in_extremo -w https://keybase.io/in_extremo--details @In_Extremo`

**Информация о текущей эпохе**

`solana epoch-info`

**Посмотреть слоты отставания**

`solana catchup --our-localhost --follow --log`

**Посмотреть список всех текущих делегаций**

`solana stakes <vote-account-address>`

**Посмотреть полученные вознаграждения за эпохи**

За последнюю эпоху

`solana inflation rewards <vote-account-address>`

Также можно указать конкретную эпоху

`solana inflation rewards <vote-account-address> --rewards-epoch <номер эпохи>`

За несколько эпох можно так посмотреть, указав в последнем ключе количество эпох.

`solana vote-account <vote-account-address> --with-rewards --num-rewards-epochs 10`

**На тему использования локнутых стейков в качестве селф-стейка**

Для тех, кто еще не привязал ключ тестнета к майннету - 2 варианта).

Требования: "Self-stake" is defined as a stake account which has a withdraw authority which matches the withdraw authority of the vote account it is delegated to.

_Простой сценарий:_

*   в качестве выплат мы указали кошелек MAIN\_IDENTITY
    
*   связываем MAIN\_IDENTITY и TDS\_IDENTITY (solana-foundation-delegation-program-cli)
    
*   создаем MAIN\_VOTE у которого WITHDRAWER\_ACCOUNT = MAIN\_IDENTITY (чем исполняем требование self-stake)
    
*   докидываем недостающие солы на MAIN\_IDENTITY, создаем стейк аккаунт и стейкаем на MAIN\_VOTE
    

Минус сценария в том, что он условно небезопасен (MAIN\_IDENTITY нужен на сервере). Тот же validators.app будет помечать красным восклицательным знаком тех, кто пойдет по первому варианту, так что рекомендация заморочиться со вторым, который описан ниже

_Сценарий посложнее:_

*   в качестве выплат мы указали кошелек WITHDRAWER\_ACCOUNT
    
*   создаем ключ MAIN\_IDENTITY
    
*   связываем MAIN\_IDENTITY и TDS\_IDENTITY (solana-foundation-delegation-program-cli)
    
*   создаем ключ MAIN\_VOTE у которого withdraw authority = WITHDRAWER\_ACCOUNT (чем исполняем требование self-stake)
    
*   докидываем недостающие солы на WITHDRAWER\_ACCOUNT, создаем стейк аккаунт и стейкаем на MAIN\_VOTE
    

Плюс сценария в том, что WITHDRAWER\_ACCOUNT хранится на другой машине или в ledger (это безопаснее). Ниже также кейс для Леджера Нано.

Вы участник mainnet-beta, получили залоченные реворды за ТДС на аппаратный кошелек Ledger Nano и хотите их положить в селфстейк себе?

Для этого с помощью кошелька например Solflare открываете свой кошелек Ledger Nano или находите в эксплорере, копируете его identity и c помощью команды ниже прописываете на сервере как withdraw аккаунт по умолчанию для своей ноды. Если пути к ключам иные, соответственно нужно их подправить

`solana vote-authorize-withdrawer ~/vote-account-keypair.json ~/mainnet-validator-keypair.json АЙДЕНТИТИ ЛЕДЖЕРА`

Далее предположим, что Ваша нода работает успешно и необходимо с воут-аккаунта вывести награды. Для этого на локальной машине устанавливаем CLI Solana, есть в т.ч. версия для Windows [https://docs.solana.com/cli/install-solana-cli-tools#windows](https://docs.solana.com/cli/install-solana-cli-tools#windows) Установка в Виндоус осуществляется в командной строке (Win+R, далее cmd.exe). После установки копируем пути, где лежат файлы json от валидатор и воут аккаунтов и подставляем в команду затем также выполняем в командной строке. Получателем можно указать также путь к своему айдентити, в этом случае награда придет на него, либо любой другой внешний нативный адрес Солана. Вместо переменной ALL можно указать нужную сумму на вывод.

`solana withdraw-from-vote-account -k validator-keypair.json vote-account-keypair.json <RECIPIENT_ADDRESS> ALL --authorized-withdrawer usb://ledger`

После отправки в консоли данной команды Ledger Nano попросит проверить и подписать или отвергнуть транзакцию. Подписываем и проверяем в эксплорере.

**Различные команды для управления аккаунтами**

**создать стейк**

`solana create-stake-account validator-stake-keypair.json`

**заделегировать стейк**

`solana delegate-stake ~/validator-stake-keypair.json ~/vote-account-keypair.json`

**деактивировать стейк**

`solana deactivate-stake ~/validator-stake-keypair.json`

**вывести баланс стейка**

`solana withdraw-stake ~/validator-stake-keypair.json ~/validator-keypair.json`

**объединение стейков (действует через две эпохи)**

`solana merge-stake ~/validator-stake-keypair.json ~/validator-stake2-keypair.json`

**поменять ключи на снятия воут аккаунта**

`solana vote-authorize-withdrawer VOTE_ACCOUNT_ADDRESS CURRENT_WITHDRAW_AUTHORITY_KEYPAIR NEW_WITHDRAW_PUBKEY_OR_KEYPAIR`

**поменять ключи на снятие стейк аккаунта**

`solana stake-authorize STAKE_ACCOUNT_ADDRESS --withdraw-authority CURRENT_WITHDRAW_KEYPAIR --new-withdraw-authority NEW_WITHDRAW_AUTHORITY_KEYPAIR_OR_PUBKEY`

Страница обновляется, если нашли неточность или что добавить пишите [_@In\_Extremo_](https://t.me/In_Extremo)

---

*Originally published on [inextremo.eth (💙,🧡) 🛸](https://paragraph.com/@inextremo/solana)*
