December 13, 2021

Solana / Консольные команды

В Солане для каждой команды можно вызвать хелп, в котором будет описано, как правильно ее использовать, какие параметры нужно там указать, чтобы она отработала верно. Чтобы посмотреть этот хелп нужно написать так:

solana -h

или

solana --help

Вот что мы увидим:

Сначала идут флаги (Flags), они представляют собой параметры к команде, которые сами по себе самодостаточны, т.е. нам не нужно к этому флагу дописывать еще что-то.

Далее идут опции (Options), они представляю собой также параметры к команде, но вот они уже требует какой то аргумент к ним и без него они не сработают, как видно на скрине выше у опции --config должен быть аргумент с путем к ключу.

Ну, и самое главное для нас - это Субкоманды:

На этом скриншоте они не все, у себя в терминале введете эту команду и посмотрите все субкоманды, которые сможете использовать. Большинство из этих команд никто из нас никогда не использовал, но есть те, которые используем постоянно, об этих командах и будет идти речь.

По каждой субкоманде мы можем вывести подсказку следующим способом:

solana transfer -h

или

solana transfer --help

В итоге увидим вот такой хелп по команде (в данном случае по субкоманде):

Также, можно увидеть подсказку, как пользоваться той или иной командой просто введя ее без каких-либо параметров, например, мы хотим узнать, что нужно ввести, чтобы отправить токены на другой ключ, вводим команду:

solana transfer

И видим следующее:

Солана ругается, что в команде отсутствует аргументы, без которых она не может работать, а именно:

  • Адрес получателя (Recipient_Address)
  • Количество (Amount)

И ниже еще мы видим подсказку, в каком виде можно использовать эту команду:

solana transfer <RECIPIENT_ADDRESS> <AMOUNT>, меняем то, что в скобках на наши данные и получаем:

solana transfer GtgtQLfqKjn3gaHuH7Fw64n49vr2DrYHiJAsSTNNscAE 100

Обратите внимание, в примере на скриншоте есть еще опция --config <FILEPATH>. Она означает, что вы можете указать путь до ключа, с которого и будете производить это действие, в нашем случае, перевод токенов. Так как во время установки Соланы мы установили ключ validator-keypair.json, как ключ по умолчанию (командой solana config set --keypair /root/solana/validator-keypair.json), то Солана всегда теперь использует наш ключ в тех командах, в которых можно использовать опцию --config <FILEPATH>.

Не бойтесь практиковаться в командах, когда находитесь в тестнете, времени у вас достаточно чтобы научиться всему. Валидатор в майннете должен уметь все и не задавать вопросы: "А как мне посмотреть кэчап?" или "А почему у меня нода не может догнать кластер?". Все эти знания вы должны получить во время тестнета.

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

Содержание

Работа с ключами

Создать ключ

solana-keygen new -o /root/solana/validator-keypair.json

Очень важный комментарий! Пожалуйста, запомните это сразу. Каждый раз, когда вы создаете ключ, будь то идентифи (он же валидатор кейпеир), ключ для воут-аккаунта, ключ для стейка или ауторизет виздравер, вы просто создаете своеобразный кошелек. В зависимости от того, какую роль вы этому кошельку назначите, он ее выполнять и будет. Но первоначально это просто обычный ключ без каких-либо признаков. Название для него вы придумываете такое, чтобы вы точно понимал, что это за ключ и для чего он у вас создан.

Среди валидаторов так сложилось, что основной ключ валидатора имеет имя validator-keypair.json

Ключ для войт-аккаунта имеет имя vote-account-keypair.json

Ключ для стейка имеет имя stake-1.json, stake-2.json и т.д.

Ключ для ауторизет виздравера имеет имя authorized-withdrawer-keypair.json

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

Еще один момент. У Соланы существует 3 кластера: Тестнет, Майннет и Девнет. Кластер это отдельная сеть, в которой могут использоваться разные версии Соланы, но которые обычно работают по тем же самым правилам. Представьте это просто как 3 параллельных реальности, где могут существовать одни и те же предметы (в нашем случае ключи). Если вы создали ключ для тестнета и записали его мнемоническую фразу или сохранили файл в формате .json, вы можете использовать этот же ключ и в майннете и в девнете, при этом между кластерами перемещение токенов невозможно (нельзя из тестнета перевести токены в майннет). И тут возникает вопроса, а почему тогда мы создаем отдельные ключи всегда и для тестнета и для майннета? А все просто - чтобы не запутаться и чтобы можно было эти ключ при необходимости связать друг между другом (как мы это делали при регистрации SFDP). Перечитайте эту заметку несколько раз и если не поняли - напишите в Песочнице, задайте наводящие вопросы, мы на них ответим и пополним этот гайд дополнительной информацией.

Операции в разных кластерах

Во время установки ноды вы прописываете основной ключ, который будет подписывать все транзакции и кластер, в котором хотите, чтобы работала нода. Как это делается - смотрим тут. Но что делать, если хочется посмотреть баланс своего ключа в другом кластере? Все очень просто, нам нужно добавлять следующие параметры к командам:

Для майннет -um

Для тестнета -ut

Для девнета -ud

Например, хотим мы посмотреть баланс нашего идентифи ключа в кластере Майннет, для этого пишем команду:

solana balance -um

Если хотим отправить токены в кластере Майннет, делаем так:

solana transfer GtgtQLfqKjn3gaHuH7Fw64n49vr2DrYHiJAsSTNNscAE 100 -um

Повторюсь! При этом вы должны понимать, что вы не можете с баланса своего ключа в теснете перевести токены в майннет. Чтобы сделать перевод у вас на ключе должны быть токены в том кластере, в котором вы хотите сделать перевод. Если по команде solana balance -um показало что у вас там есть токены, тогда вы сможете сделать перевод командой solana transfer GtgtQLfqKjn3gaHuH7Fw64n49vr2DrYHiJAsSTNNscAE 100 -um

Посмотреть публичный адрес по json файлу

Бывает ситуация, когда есть json файл ключа, а вот его публичный адрес найти не получается, для этого есть команда:

solana address -k /root/solana/validator-keypair.json

Укажите путь до своего файла и увидете публичный адрес своего ключа.

Стейк, реварды, войт-аккаунт

Создать войт-аккаунт

Для начала нам нужно создать простой ключ, как это делать идем сюда

Потом создаем из этого ключа войт-аккаунт вот так:

solana create-vote-account /root/solana/vote-account-keypair.json /root/solana/validator-keypair.json /root/solana/authorized-withdrawer-keypair.json

В этой команде мы создаем войт-аккаунт, прикрепляем его к своему основному ключу (валидатор кейпейр) и назначаем ауторизет виздравером ключ authorized-withdrawer-keypair.json. На данный момент именно так и рекомендуется создавать воут-аккаунт. А раньше можно было так:

solana create-vote-account /root/solana/vote-account-keypair.json /root/solana/validator-keypair.json

Здесь мы создавали войт-аккаунт и прикрепляли его к основному ключу, при этом функцию ауторизет-виздравера выполнял сам ключ. Для чего мы добавили еще один ключ - читаем тут.

Сменить виздравера для войт аккаунта

solana vote-authorize-withdrawer /root/solana/vote-account-keypair.json /root/solana/authorized-withdrawer-keypair.json /root/solana/authorized-withdrawer-keypair-new.json

Если вдруг вы решили сменить один авторизет виздравер на другой, то используем команду выше, там мы видим 3 ключа:

/root/solana/vote-account-keypair.json - ваш ключ войт аккаунта;

/root/solana/authorized-withdrawer-keypair.json - текущий ауторизет виздравер

/root/solana/authorized-withdrawer-keypair-new.json - новый ауторизет виздравер

как обычно, пути к ключам и их названия задаем свои.

Сменить виздравера для стейк аккаунта

solana stake-authorize EiZkmYw4t5gQT6srAGN5jM28UYsB8GH5L8nbqTm31WFL --new-stake-authority /root/solana/authorized-withdrawer-keypair-new.json --new-withdraw-authority /root/solana/authorized-withdrawer-keypair-new.json --withdraw-authority /root/solana/authorized-withdrawer-keypair.json

Для смены виздравера у стейк аккаунта нам нужны следующие ключи:

EiZkmYw4t5gQT6srAGN5jM28UYsB8GH5L8nbqTm31WFL - публичный ключ вашего стейк аккаунта (можно использовать и файл, если он у вас есть)

/root/solana/authorized-withdrawer-keypair-new.json - новый виздравер

/root/solana/authorized-withdrawer-keypair.json - старый виздравер, которым мы подпишем транзакцию

как обычно, пути к ключам и их названия задаем свои.

Информация о стейке

solana stakes /root/solana/vote-account-keypair.json

Заделегировать токены

Внимание! Если вы хотите сделать селфстейк для себя в мейне, создавайте его не на 100 SOL, а на 100.1, так как комиссия спишется с этой суммы и при создании стейк-аккаунта из 100 SOL по факту будет создан стейк-аккаунт на 99.99 SOL, что является меньше 100 SOL, и бот в майннете скажет, что у вас нет селфстейка.

Для того, чтобы заделегировать SOL на валидатора необходимо выполнить следующие действия:

1. Создать новый ключ (абсолютной не важно как вы его назовете, но я назову его validator-stake-keypair.json) следующей командой:

solana-keygen new -o /root/solana/validator-stake-keypair.json

2. Делаем из этого ключа стейк-аккаунт с указанием суммы, которую мы хотим в будущем делегировать на войт-аккаунт и сразу же в этой команде назначаем этому стейк-аккаунту ключ с правами stake-authority и withdraw-authority, т.е. мы задаем для стейк-аккаунта виздравера. Нам это нужно для того, чтобы в майннете бот определил наш стейк как селф-стейк. В тестнете это делать не обязательно, но лучше потренироваться сразу там.

solana create-stake-account /root/solana/validator-stake-keypair.json 101 --stake-authority /root/solana/authorized-withdrawer-keypair.json --withdraw-authority /root/solana/authorized-withdrawer-keypair.json

3. Делегируем стейк на войт-аккаунт, если мы делегируем на свой войт-аккаунт, то легче всего нам указать его файл, а не публичный ключ, вот так:

solana delegate-stake /root/solana/validator-stake-keypair.json /root/solana/vote-account-keypair.json

А если мы хотим заделегировать на войт-аккаунт другого валидатора, то его ключа в формате json у нас конечно же нет, поэтому будем использовать публичный ключ этого войт-аккаунта, и команда будет выглядеть вот так:

solana delegate-stake /root/solana/validator-stake-keypair.json 81iuTYDaeJ71XFGkPXNUuQ8gNvHQfBxpU7Vj2hzJ9Q4e

Теперь мы можем проверить, все ли у нас хорошо и начал ли стейк активироваться, используем команду:

solana stakes /root/solana/vote-account.json

или

solana stakes 81iuTYDaeJ71XFGkPXNUuQ8gNvHQfBxpU7Vj2hzJ9Q4e

И видим следующее:

  1. Публичный ключ стейк-аккаунта
  2. Баланс, который находится на этом стейк-аккаунте (так как он заделегирован валидатору, то этот баланс считается замороженным)
  3. Жду ответ по вопросу
  4. Делегированный стейк, тот, который фактически сейчас находится на воут-аккаунте.
  5. Активный стейк, который уже активно участвует в голосовании в сети.
  6. Публичный ключ воут-аккаунта, куда этот стейк заделегирован.
  7. Stake Authority -
  8. Withdraw Authority - публичный ключ, который имеет право забрать этот стейк назад (подробнее об этом ключе читаем тут)
  9. Номер эпохи, когда стейк будет деактивирован, активация и деактивация стейка занимает ровно 1 эпоху. (в вашем случае после делегирования стейка будет написано Stake activates starting from epoch: № эпохи.)

Узнать сколько ревардов было заработано

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

solana inflation rewards /root/solana/vote-account-keypair.json

За последние 10 эпох (больше посмотреть не получается)

solana vote-account /root/solana/vote-account-keypair.json --with-rewards --num-rewards-epochs 10

Внимание! Если решите запросить информацию за 10 эпох, то на это может потребоваться много времени. За 1-2 эпоху выдает намного быстрее, пробуйте.

Забрать реварды

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

solana withdraw-from-vote-account --authorized-withdrawer /root/solana/withdraw-testnet.json /root/solana/vote-account-keypair.json 5cNEV9dx5Puuwp2GSZsUwUchCGfxchcxS6rNuD6yNGEh 50

Обратите внимание! Вы должны всегда оставлять небольшую сумма на воут-аккаунте. Не забирайте все реварды под ноль, или используйте ALL, чтобы система сама подсчитала необходимый минимальный остаток, а остальное перевело на указанный вами ключ (как выглядит эта команда смотрите немного ниже)

В этой команде мы забираем реварды в количестве 50 токенов и переводим их на ключ 5cNEV9dx5Puuwp2GSZsUwUchCGfxchcxS6rNuD6yNGEh, при этом для подписания этой транзакции мы используем authorized-withdrawer (кто это такой - читаем тут)

В том случае, если вы не задавали authorized-withdrawer для воут-аккаунта в процессе его создания (как создавать его читаем тут), то команда будет иметь такой вид:

solana withdraw-from-vote-account /root/solana/vote-account-keypair.json 5cNEV9dx5Puuwp2GSZsUwUchCGfxchcxS6rNuD6yNGEh 50

В этом случае подписывает транзакцию ваш основной ключ (validator-keypair.json), так как он тоже является authorized-withdrawer, т.е. имеет право на управление воут-ключем (разбираемся в этом вопросе подробнее тут).

Также вы можете забрать все реварды с воут-аккаунта следующей командой:

solana withdraw-from-vote-account /root/solana/vote-account-keypair.json 5cNEV9dx5Puuwp2GSZsUwUchCGfxchcxS6rNuD6yNGEh ALL

Деактивировать стейк

solana deactivate-stake /root/solana/validator-stake-keypair.json

На деакцтивацию стейка, как и на активацию необходима 1 эпоха.

Забрать стейк со стейк аккаунта

solana withdraw-stake /root/solana/validator-stake-keypair.json /root/solana/validator-keypair.json 100 (указываем количество, можно забрать все командой ALL) и команда будет такой:

solana withdraw-stake /root/solana/validator-stake-keypair.json /root/solana/validator-keypair.json ALL

Объединить стейки

Если вы сделали несколько стейк аккаунтов (и они в данный момент имеют статус active) и хотите объединить их в один, можете это сделать следующей командой:

solana merge-stake /root/solana/validator-stake1-keypair.json /root/solana/validator-stake2-keypair.json

В случае успеха этот ключ перестанет быть стейк-аккаунтом - /root/solana/validator-stake2-keypair.json, а весь стейк с него перейдет в этот стейк-аккаунт - /root/solana/validator-stake1-keypair.json

Изменить комиссию войт-аккаунта

Если вы не создавали для войт-аккаунта authorized-withdrawer

solana vote-update-commission 81iuTYDaeJ71XFGkPXNUuQ8gNvHQfBxpU7Vj2hzJ9Q4e 10 /root/solana/validator-keypair.json

Если вы создавали authorized-withdrawer и связывали его с войт-аккаунтом

solana vote-update-commission 81iuTYDaeJ71XFGkPXNUuQ8gNvHQfBxpU7Vj2hzJ9Q4e 10 /root/solana/authorized-withdrawer-keypair.json

Что в первом, что во втором случае меняем мой публичный ключ войт-акканута, вот этот - 81iuTYDaeJ71XFGkPXNUuQ8gNvHQfBxpU7Vj2hzJ9Q4e на свой публичный ключ войт-аккаунта

Отправка токенов

На кошелек, на котором уже были токены:

solana transfer GtgtQLfqKjn3gaHuH7Fw64n49vr2DrYHiJAsSTNNscAE 10

На кошелек, на котором еще не было токенов (только что создали, например):

solana transfer GtgtQLfqKjn3gaHuH7Fw64n49vr2DrYHiJAsSTNNscAE 10 --allow-unfunded-recipient

Убрать желтый треугольник

Кэчап

Проверка кэчапа в на текущий момент:

solana catchup --our-localhost

Проверка кэчапа в течение времени (пока не остановите его с помощью сочетания клавиш ctrl+C)

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

Как посмотреть свои кредиты и место по кредитам

solana validators -ul --sort=credits -r -n | grep GtgtQLfqKjn3gaHuH7Fw64n49vr2DrYHiJAsSTNNscAE

Заменяем мой публичный ключ на свой.

Как посмотреть свой скип в текущей эпохе и сколько слотов уже сделано/пропущено

solana -v block-production | grep GtgtQLfqKjn3gaHuH7Fw64n49vr2DrYHiJAsSTNNscAE | awk 'NR == 1'

Заменяем мой публичный ключ на свой.

Сколько слотов запланировано в данную эпоху

solana leader-schedule | grep GtgtQLfqKjn3gaHuH7Fw64n49vr2DrYHiJAsSTNNscAE | wc -l

Заменяем мой публичный ключ на свой.

Как посмотреть, какие слоты я уже сделал или пропустил в текущей эпохе

solana -v block-production | grep GtgtQLfqKjn3gaHuH7Fw64n49vr2DrYHiJAsSTNNscAE

Заменяем мой публичный ключ на свой.

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

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

Информация по кластеру (сколько валидаторов на какой версии соланы и др.)

solana validators | grep "current validators"

Посмотреть сколько нод сейчас не в сети (делинкет)

solana validators | grep "Delinquent Stake"

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

solana epoch-info

Узнать текущий слот

solana slot

Логи соланы и журнал solana.service

Посмотреть логи соланы

tail -f /root/solana/solana.log

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

Посмотреть системный журнал Solana.service

journalctl -u solana.service

Если вы введете эту команду, то окажитесь на 1 странице системного журнала Соланы, которая вмещает в себя информацию в размере 46 строк (в моем случае 46 строк, у вас может быть больше или меньше, зависет о разрешения экрана), и тут есть сложность посмотреть последние страницы системного журнала Соланы, так как перелистывать его нужно пробелом. Если у вас нода работает давно, то таких страниц у вас может быть много, поэтому чтобы переместиться сразу на последнюю страницу системного журана Соланы, на которой вы увидите актуальную информацию по событиям, используем ключ -e и команда будет выглядеть так:

journalctl -u solana.service -e

Посмотреть записей системного журнала Solana.service в режиме потока

journalctl -u solana.service -f

Команды установки и обслуживания ноды

Установить Solana CLI

sh -c "$(curl -sSfL https://release.solana.com/v1.9.1/install)"

Подставляем необходимую версию за место "1.9.1". Актуальную версию смотрим в официальном дискорде команды - https://discord.gg/solana в канале testnet-announcements (для тестнета) и в канале mb-announcements (для майннета)

Обновить Solana

solana-install init v1.9.1

Подставляем необходимую версию за место "1.9.1". Актуальную версию смотрим в официальном дискорде команды - https://discord.gg/solana в канале testnet-announcements (для тестнета) и в канале mb-announcements (для майннета)

Запустить Solana (ноду)

systemctl start solana.service

или

systemctl start solana

Перезапустить Solana (рестарт ноды)

systemct restart solana.service

или

systemctl restart solana

Остановить Solana (ноду)

systemctl stop solana.service

или

systemctl stop solana

Посмотреть статус Solana (ноды)

systemctl status solana.service

или

systemctl status solana

Перезагрузить демона

Команду необходимо запускать после внесения любых изменений в сервисный файл solana.service

systemctl daemon-reload

Установить в конфиг кластер по умолчанию

Актуальные данные для каждого кластера лучше смотреть тут

Тестнет

solana config set --url https://api.testnet.solana.com

Майннет

solana config set --url https://api.mainnet-beta.solana.com

Девнет

solana config set --url https://api.devnet.solana.com

Установить в конфиг ключ по умолчанию

solana config set --keypair /root/solana/validator-keypair.json