Перейти к основному содержимому

Справочник CLI

aetron-miner - референсный клиент, который майнер запускает у себя. Это тонкая обёртка командной строки над фоновым демоном: CLI шлёт запросы через локальный RPC-сокет, а демон держит личность, соединение с цепью и движок, который забирает задания. Здесь перечислены все группы команд, что делает каждая подкоманда, её синтаксис и типичный пример. Пошаговая первая настройка описана в статье С чего начать майнить.

Вызов и глобальные опции​

aetron-miner [--lang <en|ru>] [COMMAND] [ARGS]

--lang глобальный и может стоять при любой команде. Принимает en и ru. Если его нет, язык интерфейса определяется по операционной системе. Флаг имеет приоритет над переменной окружения AETRON_LANG, и выбор замораживается на весь оставшийся процесс.

Запуск aetron-miner без команды ведёт себя по-разному в зависимости от того, где он выполняется:

  • В терминале (когда и stdin, и stdout являются TTY) открывается интерактивный TUI, полноэкранная панель для тех же операций, что описаны ниже.
  • В пайпе, скрипте или CI печатается стандартная справка, и процесс завершается, а не зависает на интерактивном экране.
aetron-miner # интерактивный TUI
aetron-miner --lang ru status
aetron-miner | cat # печатает справку, TUI не открывается

Состояние живёт под ~/.aetron-miner/: config.toml для конфигурации, daemon.sock для RPC-сокета, daemon.log для логов и keystore/ для ключей.

Настройка и жизненный цикл​

init​

Интерактивный мастер, создающий ~/.aetron-miner/config.toml. Если файл уже существует, спрашивает перед перезаписью. Когда stdin не является TTY, переходит на построчное чтение ответов и работает в скриптах.

aetron-miner init

Мастер спрашивает путь к кошельку, идентификатор Нейронета, путь к файлу модели, необязательный лимит GPU от 0 до 100 процентов (пусто означает отсутствие лимита), каталог кэша для моделей и датасетов и максимальный размер кэша в ГБ как мягкий лимит, где 0 означает без ограничений. Для размера кэша он предлагает половину свободного места на томе с этим каталогом. Затем спрашивает сеть (mainnet, testnet или local, по умолчанию testnet), а для local дополнительно WebSocket-адрес ноды Substrate и идентификатор задачи.

start​

Поднимает майнера целиком одной командой: запускает фоновый демон, дожидается его RPC-сокета, затем запускает цикл событий движка. Эквивалентно daemon start, за которым идёт engine start.

aetron-miner start

stop​

Сначала останавливает движок (аккуратно, дав текущему заданию завершиться), затем демон.

aetron-miner stop

status​

Печатает, существует ли файл конфигурации, затем опрашивает демон по RPC и отдаёт живой снимок: PID, аптайм, настроенную сеть, реально собранный бэкенд цепи, состояние майнинга и число выполненных заданий. Если демон не запущен, откатывается на то, что можно прочитать локально, и подсказывает, как его поднять.

aetron-miner status

logs​

Стримит ~/.aetron-miner/daemon.log: сначала печатает уже накопленное, затем следует за файлом, как tail -f. Ротацию обрабатывает перечитыванием с начала, когда файл уменьшился. Если файла нет, скажет об этом, а не будет ждать.

aetron-miner logs

daemon​

Жизненный цикл фонового процесса. start порождает отсоединённый демон, который пишет pid-файл и открывает Unix-сокет; CLI ждёт появления обоих до 3 секунд, прежде чем отчитаться об успехе. stop читает pid-файл, шлёт SIGTERM, ждёт корректного выхода до 5 секунд, затем шлёт SIGKILL. restart - это stop и start подряд, и именно так применяются правки конфига. status шлёт пинг и печатает PID с аптаймом либо сообщает, что ничего не запущено.

aetron-miner daemon start
aetron-miner daemon stop
aetron-miner daemon restart # применить изменения в config.toml
aetron-miner daemon status

engine​

Управляет циклом событий внутри работающего демона. Всем пяти подкомандам нужен поднятый демон, иначе CLI попросит сначала выполнить daemon start.

  • start начинает забирать задания.
  • stop запрашивает аккуратное завершение и дожидается текущего задания.
  • pause приостанавливает цикл, ничего не разбирая.
  • resume снимает паузу.
  • status печатает снимок движка: режим, выполненные задания, упавшие задания, среднюю задержку в миллисекундах, идентификатор текущего задания, если оно есть, последнюю ошибку, если она была, завершённые циклы Pulse, число сделанных проверок Pulse, уровень Pulse и активный бэкенд инференса.
aetron-miner engine start
aetron-miner engine stop
aetron-miner engine pause # освободить GPU, не теряя состояние демона
aetron-miner engine resume
aetron-miner engine status

env​

Окружение Python для раннера, то есть стек PyTorch, который нужен вычислительной части. Сам бинарь раннера ML-стека не содержит, поэтому именно это окружение и даёт ему возможность работать.

aetron-miner env install [--manifest <path|url>] [--profile <name>] [--skip-selftest]
aetron-miner env update [--manifest <path|url>] [--profile <name>]
aetron-miner env status [--json]
aetron-miner env verify
aetron-miner env rollback
  • install читает подписанный манифест версий, определяет ваше железо, подбирает подходящий профиль (сборка CUDA, Apple Silicon MPS или CPU) и ставит зафиксированный набор колёс. На вашей машине ничего не резолвится: lock-файл перечисляет каждый пакет с хэшем. --profile навязывает профиль вместо автоопределения, и так проверяют стек, который вашему GPU не достался бы.
  • update собирает новое окружение рядом с текущим и переключается только после успешного самотеста. Старое окружение остаётся на диске.
  • status сообщает активный профиль, установленные версии и результат последнего самотеста. --json делает вывод машиночитаемым.
  • verify заново прогоняет самотест раннера против текущего окружения.
  • rollback возвращает current на предыдущее окружение. Это выход из неудачного обновления.

--skip-selftest активирует окружение, которое себя не доказало. Он существует для отладки и так к нему и стоит относиться: окружение, чьи числа отличаются от зафиксированного стека, выдаёт результаты, не проходящие проверку.

aetron-miner env install
aetron-miner env status --json
aetron-miner env rollback

config​

Локальные настройки клиента, которым не место в config.toml. Сейчас это токен HuggingFace, который ускоряет загрузку моделей и обязателен для весов с ограниченным доступом.

aetron-miner config set-hf-token [<token>]
aetron-miner config show-hf-token
aetron-miner config clear-hf-token

Передача токена аргументом работает в скриптах; в терминале его можно не указывать, и CLI спросит его скрытым вводом. show-hf-token печатает, откуда токен взялся, и маскированное значение, но никогда сам токен. clear-hf-token удаляет ~/.aetron-miner/hf_token и не трогает ни переменные окружения, ни файл от huggingface-cli login.

wallet​

Управление хранилищем ключей. Каждая подкоманда общается с работающим демоном, который держит разблокированный ключ в памяти до своей остановки. Пароли читаются без эха, когда терминал интерактивный.

aetron-miner wallet generate [--name <label>]
aetron-miner wallet import-seed [--name <label>]
aetron-miner wallet import-json <json_path> [--name <label>]
aetron-miner wallet unlock
aetron-miner wallet info
  • generate создаёт новое хранилище sr25519 из случайного сида BIP-39 и один раз печатает сид-фразу. --name задаёт метку в метаданных хранилища, по умолчанию miner-hotkey.
  • import-seed импортирует существующую сид-фразу BIP-39 из 12 или 24 слов, читая её из stdin, и шифрует паролем, который вы вводите дважды.
  • import-json импортирует JSON-экспорт хранилища polkadot-js. Спрашивает пароль, которым экспорт был зашифрован, а затем новый пароль для локального хранения.
  • unlock расшифровывает хранилище и передаёт ключ демону, который держит его в памяти до остановки.
  • info печатает адрес, состояние (заблокировано или разблокировано) и имя.
aetron-miner wallet generate --name my-hotkey
aetron-miner wallet unlock
aetron-miner wallet info

neuronets​

Читает реестр Нейронетов в цепи и регистрирует майнера. Этим командам нужен работающий демон, подключённый к ноде, потому что реестр читается из цепи.

list​

Показывает доступные Нейронеты с идентификатором, именем, обоими бейджами приватности (режим безопасности - Standard или Confidential с TEE, и режим допуска - Auto, Manual или Open), стейком в AET, занятыми и всеми слотами, процентом комиссии владельца, видами задач и вашим собственным статусом по этому Нейронету под вашим горячим ключом.

aetron-miner neuronets list

show​

Детали по одному Нейронету: его задачи, майнеры, экономика и приглашение, если оно к вам относится.

aetron-miner neuronets show <id>

register​

Регистрирует майнера в паре (neuronet_id, task_id). task_id позиционный и по умолчанию равен 0. Регистрация не бесплатна: она сжигает AET, а при включённом принуждении залога ещё и резервирует обеспечение. При успехе демон записывает идентификаторы Нейронета и задачи в конфиг. Нейронеты в режиме ручного одобрения доступны только по приглашению, поэтому регистрация проходит лишь пока приглашение действует; его видно в колонке статуса в neuronets list.

aetron-miner neuronets register <neuronet_id> [task_id]
aetron-miner neuronets register 3 0 # пример

register-prepare​

Для схемы «холодный отдельно от горячего», когда платящий холодный ключ не лежит на этой машине. Команда печатает параметры экстринзика burned_register, вы подписываете его своим кошельком, а демон добавляет подпись, доказывающую, что горячим ключом управляет он. Используйте её вместо register, когда холодный ключ живёт в другом месте.

aetron-miner neuronets register-prepare <neuronet_id> [task_id] [--coldkey <ss58>]

--coldkey перебивает значение coldkey_ss58 из конфига.

deregister​

Выходит из пары (neuronet_id, task_id). Обеспечение не возвращается сразу: сначала оно уходит в окно разблокировки, а сожжённое при регистрации не возвращается никогда.

aetron-miner neuronets deregister <neuronet_id> [task_id]

models и datasets​

Обе группы управляют локальным кэшем артефактов и принимают одинаковые подкоманды; разница только в том, с каким видом артефактов они работают. Артефакты адресуются префиксом хэша длиной не менее 6 шестнадцатеричных символов.

list​

Показывает таблицу закэшированных артефактов. Сначала спрашивает демон, а если тот не запущен, сканирует локальный каталог кэша, поэтому работает и офлайн.

aetron-miner models list
aetron-miner datasets list

show​

Печатает детали одного артефакта, найденного по префиксу хэша.

aetron-miner models show <hash_prefix>

verify​

Перепроверяет артефакт. По умолчанию делается лёгкая проверка только по метаданным. С --full пересчитывается SHA-256 каждого файла из манифеста, что дольше, но ловит повреждения на диске.

aetron-miner models verify <hash_prefix> [--full]

delete​

Удаляет артефакт из кэша после подтверждения. --yes пропускает вопрос для использования в скриптах.

aetron-miner models delete <hash_prefix> [--yes]

download​

Забирает артефакт в кэш из указанного вами источника. Демон тянет manifest.json с базового URL, скачивает каждый файл, сверяет его SHA-256 и атомарно публикует результат, поэтому демон обязан быть запущен. --from обязателен, потому что цепь не несёт списка зеркал по каждой модели и оператор обязан указать источник явно. --model-hash включает гейт целостности: если передать ожидаемый хэш модели из цепи, корень Меркла манифеста обязан с ним совпасть, иначе загрузка отклоняется, что закрывает дорогу поддельному зеркалу.

aetron-miner models download --from <base_url> [--model-hash <hex>]
aetron-miner models list
aetron-miner models verify a1b2c3 --full
aetron-miner models download --from https://host/models/a1b2c3 --model-hash 0xa1b2...
aetron-miner datasets delete a1b2c3 --yes

Куда идти дальше​