Solana / Консольные команды
В Солане для каждой команды можно вызвать хелп, в котором будет описано, как правильно ее использовать, какие параметры нужно там указать, чтобы она отработала верно. Чтобы посмотреть этот хелп нужно написать так:
Сначала идут флаги (Flags), они представляют собой параметры к команде, которые сами по себе самодостаточны, т.е. нам не нужно к этому флагу дописывать еще что-то.
Далее идут опции (Options), они представляю собой также параметры к команде, но вот они уже требует какой то аргумент к ним и без него они не сработают, как видно на скрине выше у опции --config должен быть аргумент с путем к ключу.
Ну, и самое главное для нас - это Субкоманды:
На этом скриншоте они не все, у себя в терминале введете эту команду и посмотрите все субкоманды, которые сможете использовать. Большинство из этих команд никто из нас никогда не использовал, но есть те, которые используем постоянно, об этих командах и будет идти речь.
По каждой субкоманде мы можем вывести подсказку следующим способом:
В итоге увидим вот такой хелп по команде (в данном случае по субкоманде):
Также, можно увидеть подсказку, как пользоваться той или иной командой просто введя ее без каких-либо параметров, например, мы хотим узнать, что нужно ввести, чтобы отправить токены на другой ключ, вводим команду:
Солана ругается, что в команде отсутствует аргументы, без которых она не может работать, а именно:
И ниже еще мы видим подсказку, в каком виде можно использовать эту команду:
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>.
Не бойтесь практиковаться в командах, когда находитесь в тестнете, времени у вас достаточно чтобы научиться всему. Валидатор в майннете должен уметь все и не задавать вопросы: "А как мне посмотреть кэчап?" или "А почему у меня нода не может догнать кластер?". Все эти знания вы должны получить во время тестнета.
Поэтому, поехали разбирать основные команды:
Содержание
Работа с ключами
Создать ключ
Очень важный комментарий! Пожалуйста, запомните это сразу. Каждый раз, когда вы создаете ключ, будь то идентифи (он же валидатор кейпеир), ключ для воут-аккаунта, ключ для стейка или ауторизет виздравер, вы просто создаете своеобразный кошелек. В зависимости от того, какую роль вы этому кошельку назначите, он ее выполнять и будет. Но первоначально это просто обычный ключ без каких-либо признаков. Название для него вы придумываете такое, чтобы вы точно понимал, что это за ключ и для чего он у вас создан.
Среди валидаторов так сложилось, что основной ключ валидатора имеет имя validator-keypair.json
Ключ для войт-аккаунта имеет имя vote-account-keypair.json
Ключ для стейка имеет имя stake-1.json, stake-2.json и т.д.
Ключ для ауторизет виздравера имеет имя authorized-withdrawer-keypair.json
Всегда записывайте мнемонические фразы для своих ключей, всегда делайте бекапы своих ключей на локальном компьютере.
Еще один момент. У Соланы существует 3 кластера: Тестнет, Майннет и Девнет. Кластер это отдельная сеть, в которой могут использоваться разные версии Соланы, но которые обычно работают по тем же самым правилам. Представьте это просто как 3 параллельных реальности, где могут существовать одни и те же предметы (в нашем случае ключи). Если вы создали ключ для тестнета и записали его мнемоническую фразу или сохранили файл в формате .json, вы можете использовать этот же ключ и в майннете и в девнете, при этом между кластерами перемещение токенов невозможно (нельзя из тестнета перевести токены в майннет). И тут возникает вопроса, а почему тогда мы создаем отдельные ключи всегда и для тестнета и для майннета? А все просто - чтобы не запутаться и чтобы можно было эти ключ при необходимости связать друг между другом (как мы это делали при регистрации SFDP). Перечитайте эту заметку несколько раз и если не поняли - напишите в Песочнице, задайте наводящие вопросы, мы на них ответим и пополним этот гайд дополнительной информацией.
Операции в разных кластерах
Во время установки ноды вы прописываете основной ключ, который будет подписывать все транзакции и кластер, в котором хотите, чтобы работала нода. Как это делается - смотрим тут. Но что делать, если хочется посмотреть баланс своего ключа в другом кластере? Все очень просто, нам нужно добавлять следующие параметры к командам:
Например, хотим мы посмотреть баланс нашего идентифи ключа в кластере Майннет, для этого пишем команду:
Если хотим отправить токены в кластере Майннет, делаем так:
solana transfer GtgtQLfqKjn3gaHuH7Fw64n49vr2DrYHiJAsSTNNscAE 100 -um
Повторюсь! При этом вы должны понимать, что вы не можете с баланса своего ключа в теснете перевести токены в майннет. Чтобы сделать перевод у вас на ключе должны быть токены в том кластере, в котором вы хотите сделать перевод. Если по команде solana balance -um показало что у вас там есть токены, тогда вы сможете сделать перевод командой solana transfer GtgtQLfqKjn3gaHuH7Fw64n49vr2DrYHiJAsSTNNscAE 100 -um
Посмотреть публичный адрес по json файлу
Бывает ситуация, когда есть 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 - старый виздравер, которым мы подпишем транзакцию
как обычно, пути к ключам и их названия задаем свои.
Информация о стейке
Заделегировать токены
Внимание! Если вы хотите сделать селфстейк для себя в мейне, создавайте его не на 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
Теперь мы можем проверить, все ли у нас хорошо и начал ли стейк активироваться, используем команду:
- Публичный ключ стейк-аккаунта
- Баланс, который находится на этом стейк-аккаунте (так как он заделегирован валидатору, то этот баланс считается замороженным)
- Жду ответ по вопросу
- Делегированный стейк, тот, который фактически сейчас находится на воут-аккаунте.
- Активный стейк, который уже активно участвует в голосовании в сети.
- Публичный ключ воут-аккаунта, куда этот стейк заделегирован.
- Stake Authority -
- Withdraw Authority - публичный ключ, который имеет право забрать этот стейк назад (подробнее об этом ключе читаем тут)
- Номер эпохи, когда стейк будет деактивирован, активация и деактивация стейка занимает ровно 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
Убрать желтый треугольник
Кэчап
Проверка кэчапа в на текущий момент:
Проверка кэчапа в течение времени (пока не остановите его с помощью сочетания клавиш ctrl+C)
Как посмотреть свои кредиты и место по кредитам
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.service
Посмотреть логи соланы
Обратите внимание, что файл с логами у вас может лежать в другой директории, укажите правильный для вас путь.
Посмотреть системный журнал Solana.service
Если вы введете эту команду, то окажитесь на 1 странице системного журнала Соланы, которая вмещает в себя информацию в размере 46 строк (в моем случае 46 строк, у вас может быть больше или меньше, зависет о разрешения экрана), и тут есть сложность посмотреть последние страницы системного журнала Соланы, так как перелистывать его нужно пробелом. Если у вас нода работает давно, то таких страниц у вас может быть много, поэтому чтобы переместиться сразу на последнюю страницу системного журана Соланы, на которой вы увидите актуальную информацию по событиям, используем ключ -e и команда будет выглядеть так:
Посмотреть записей системного журнала Solana.service в режиме потока
Команды установки и обслуживания ноды
Установить 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
Подставляем необходимую версию за место "1.9.1". Актуальную версию смотрим в официальном дискорде команды - https://discord.gg/solana в канале testnet-announcements (для тестнета) и в канале mb-announcements (для майннета)
Запустить Solana (ноду)
Перезапустить Solana (рестарт ноды)
Остановить Solana (ноду)
Посмотреть статус Solana (ноды)
Перезагрузить демона
Команду необходимо запускать после внесения любых изменений в сервисный файл solana.service
Установить в конфиг кластер по умолчанию
Актуальные данные для каждого кластера лучше смотреть тут
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