Production-контур
Архитектурное решение
API wallet, он же agent wallet, — отдельный приватный ключ, который подписывает торговые действия (ордера, отмены) от имени master или subaccount address, но не является этим адресом. Он годится для подписи через exchange endpoint, но при чтении account state через info endpoint часто возвращается пустой результат — для этого нужен master или subaccount address. Такое разделение ограничивает ущерб при компрометации ключа бота: злоумышленник с агентом может торговать вашим капиталом, но не выводить его.
Что должна уметь система
Материал рассчитан на опытных пользователей CEX/DEX, которые уже работают с perpetual, funding и стейблкоин-депозитами и переходят к автоматизации через API. Предполагается знакомство с моделью подписи транзакций, разницей master address и subaccount, а также с тем, что REST и WebSocket API Hyperliquid требуют собственной обвязки поверх официального SDK.
Почему нельзя просто дать боту приватный ключ от кошелька
Частая ошибка при подключении торгового бота — использовать тот же приватный ключ, которым подписываются депозиты и выводы. На Hyperliquid маржа привязана к адресу пользователя в hypercore, а не к кастодиальной записи биржи, поэтому этот адрес фактически и есть капитал пользователя. Если ключ от master address оказывается в переменных окружения сервера, в логах или в коде репозитория, компрометация этого ключа равна компрометации всего баланса — включая возможность вывода.
Agent wallet, он же API wallet, решает именно эту задачу: это отдельный ключ, который подписывает действия от имени master или subaccount, но сам не является этим адресом. Он создаётся специально для автоматизации и может быть отозван без необходимости менять master address или переносить капитал.
Что именно может подписывать agent wallet
По документации agent wallet годится для подписи ордеров и отмен через exchange endpoint — то есть для всех действий, формирующих торговую активность: биржа принимает подписанные actions, где важно указать корректный идентификатор торгуемого инструмента (asset id) и свой внутренний номер заявки (client order id) — по нему потом можно сверить, что стало с ордером. Это ровно тот объём прав, который нужен алгоритму: открыть позицию, закрыть, изменить лимитную заявку.
А вот для чтения account state — позиций, баланса, открытых ордеров — правило другое: в запросе нужно указывать master или subaccount address, а не адрес агента. Если подставить туда адрес agent wallet, ответ часто будет пустым, потому что агент физически не хранит баланс и позиции — он только подписывает поручения от имени того адреса, который их хранит. Дальше по тексту это разделение прав на подпись и на чтение разворачивается в конкретные архитектурные и операционные решения при построении бота.
Жизненный цикл ключа: nonce state и deregistration
Agent wallet не статичен — у него есть жизненный цикл, привязанный к внутреннему счётчику подписанных сообщений (nonce state). Документация прямо указывает: после deregistration (отзыва прав) адрес agent не следует использовать повторно, потому что счётчик этого адреса уже прожил свой цикл. Это отличается от привычной модели биржевых API-ключей, где отозванный ключ теоретически можно восстановить или переиспользовать после повторной активации.
Для операционной практики это означает: при ротации ключей бота нужно генерировать новый agent wallet, а не переиспользовать старый после deregistration. Если у вас несколько ботов или сред (тестовая и продакшн), логичнее держать под каждую отдельный agent wallet, привязанный к одному master address, — это упрощает точечный отзыв прав без остановки остальных процессов.
Как это выглядит в архитектуре реального бота
На практике бот использует два клиента с разными адресами. Info client вызывает публичные методы — например запрос, который отдаёт список торгуемых инструментов и рядом с ним параллельный массив с их текущими параметрами: маркировочной ценой, оракульной ценой, открытым интересом, ставкой funding и объёмом торгов — без подписи вообще. Exchange client подписывает и отправляет ордера, используя agent wallet. Для проверки статуса позиции и баланса info client снова вызывается, но уже с master или subaccount address как параметром запроса — не с адресом агента.
Ответ на отправку ордера фиксирует лишь факт приёма подписанного поручения биржей, а не финальное исполнение ордера: подтверждение статуса — отдельный шаг через info endpoint, сверенный по собственному номеру заявки (client order id). Именно на этом стыке чаще всего живут баги архитектуры клиента: бот либо путает адреса при чтении, либо принимает ответ на отправку ордера за подтверждение исполнения, не сверяя его отдельным запросом.
Типы ордеров и что это значит для agent wallet
Exchange endpoint поддерживает разные режимы исполнения, и agent wallet подписывает их одинаково — разница в том, как биржа обрабатывает заявку после приёма. ALO (add liquidity only, post only) означает: если заявка пересекает книгу и могла бы исполниться как тейкер, она отменяется вместо рыночного исполнения. IOC отменяет неисполненный остаток заявки сразу после попытки матчинга, а GTC оставляет её в книге до исполнения или отмены. Выбор режима — часть логики стратегии, а не подписи.
Отдельная точка ошибок — asset id, который различается для perpetual и spot рынков. Если бот отправляет поручение с asset id не того рынка, ошибка произойдёт не на уровне подписи, а на уровне содержимого самого поручения: agent wallet подписывает то, что ему передали, независимо от корректности этого содержимого.
Rate limits и WebSocket как часть той же модели прав
Разделение ключей не отменяет необходимости соблюдать общие ограничения API. Документация задаёт взвешенный лимит REST-запросов, а также отдельные лимиты на количество WebSocket-подключений, подписок, запросов «в полёте» и сообщений. Retry-логика бота должна учитывать тип запроса, безопасность повторной отправки без задвоения ордера, паузу перед повтором и фактический статус ордера, а не только сам факт сетевой ошибки.
WebSocket-подключение добавляет отдельный слой ответственности: подписки на книгу ордеров, сделки, свечи, исполнения пользователя и состояние аккаунта в реальном времени требуют корректной обработки переподключения, повторной подписки после разрыва, контроля последовательности и свежести данных, а также штатного закрытия соединения. Эта инфраструктура нужна независимо от того, каким ключом подписываются ордера — agent wallet её не упрощает и не заменяет.
Что официальный SDK не делает за вас
Официальный Python SDK содержит примеры Info client, Exchange client, подписи поручений, размещения ордеров и базовой работы с WebSocket — этого достаточно, чтобы понять структуру запросов и повторить их в собственном коде. Но примеры остаются примерами: полноценную стратегию повторных попыток с учётом лимитов, устойчивую сверку между отправкой ордера и его статусом, а также обработку долгих сетевых сбоев и переподключения WebSocket в продакшне нужно достраивать самостоятельно поверх SDK.
Корректная настройка ключей — необходимое, но не достаточное условие надёжности бота. Она защищает капитал от компрометации подписи, но не отменяет инженерную работу: без неё даже идеально разделённые ключи не спасут от бота, который дублирует ордера при обрыве связи или неверно интерпретирует статус заявки.
Пошаговая настройка разделения ключей для торгового бота
Ниже последовательность действий при подготовке бота к работе с реальным капиталом, основанная на разделении ролей между master address, subaccount и agent wallet.
- Создать отдельный agent wallet
Сгенерируйте новую пару ключей специально для бота, не переиспользуя ключи от master address или от других ботов. Каждая среда — тестовая и продакшн — получает собственный agent wallet.
- Авторизовать agent wallet на master address или subaccount
Свяжите созданный ключ с тем адресом, чьим капиталом должен управлять бот. Если торговля ведётся на нескольких subaccount, для каждого имеет смысл рассмотреть отдельного агента, чтобы отзыв прав по одному не затрагивал остальные.
- Настроить чтение account state через master или subaccount address
В коде info client укажите параметром запроса именно master или subaccount address, а не адрес agent wallet. Проверьте это на раннем этапе: попытка прочитать баланс или позиции по адресу агента вернёт пустой результат, и лучше обнаружить эту ошибку до подключения реального капитала.
- Провести тестовый ордер с проверкой по client order id
Отправьте небольшой ордер через exchange client, подписанный agent wallet, присвоив ему собственный client order id. Затем отдельным запросом к info endpoint убедитесь, что статус ордера и итоговая позиция совпадают с ожидаемым — это проверяет всю цепочку подписи, отправки и сверки на малой сумме до масштабирования.
- Настроить ротацию и deregistration ключей
Заложите в операционный процесс регулярную замену agent wallet и порядок действий при подозрении на утечку: немедленный deregistration скомпрометированного ключа и генерация нового, без повторного использования старого адреса — его nonce state уже прожил свой цикл.
Что дополнительно проверять на рынках, развёрнутых через HIP-3
Если agent wallet бота торгует на рынке, развёрнутом через HIP-3 deployer actions, права на подпись ордеров остаются теми же, но качество исполнения зависит от параметров, которые задаёт не пользователь, а деплойер рынка: обновления оракульной цены, множители funding, возможность приостановки торгов (halt trading) и предельные значения открытого интереса (OI caps). Эти параметры не влияют на то, что может подписывать agent wallet, но напрямую влияют на то, стоит ли вообще направлять на такой рынок автоматическую стратегию.
Перед подключением бота к новому HIP-3 рынку имеет смысл свериться с этими параметрами через официальный интерфейс отдельно от проверки прав ключа: конфигурация деплойера может измениться независимо от настроек agent wallet, а бот, ориентирующийся только на статичный список рынков в своём коде, рискует не заметить halt trading или изменённый cap вовремя.
Вопросы и ответы
Частые вопросы
Можно ли использовать один agent wallet для нескольких ботов одновременно?
Технически ничего не мешает подписывать действия разных процессов одним agent wallet, но операционно это усложняет отзыв прав: deregistration такого ключа остановит сразу все процессы, которые на него завязаны. Отдельный agent wallet под каждого бота или среду (тестовая/продакшн) позволяет отозвать доступ точечно, не затрагивая остальные.
Почему нельзя повторно использовать agent wallet после deregistration?
Это связано с жизненным циклом внутреннего счётчика подписанных сообщений (nonce state): после deregistration этот счётчик для адреса agent уже прожил свой цикл, и повторное использование того же адреса не предусмотрено документацией. Практический вывод — при ротации ключей нужно генерировать новый agent wallet, а не пытаться восстановить старый.
Влияет ли выбор типа ордера (ALO, IOC, GTC) на то, как его подписывает agent wallet?
Нет, agent wallet подписывает поручение одинаково независимо от типа исполнения. Разница проявляется после приёма ордера биржей: ALO отменяет заявку вместо тейкер-исполнения при пересечении книги, IOC отменяет неисполненный остаток сразу, а GTC оставляет заявку в книге до исполнения или отмены.
Что дополнительно проверять для рынков, развёрнутых через HIP-3?
Для таких рынков деплойер задаёт обновления оракульной цены, множители funding, возможность приостановки торгов и предельные значения открытого интереса через отдельные deployer actions. Перед тем как направлять на такой рынок торгового бота с agent wallet, стоит оценить качество книги с учётом этих параметров через официальный интерфейс, а не полагаться только на статичный список рынков в коде бота.
Что если ошибиться с asset id при отправке ордера через agent wallet?
Agent wallet подпишет поручение независимо от того, указан ли в нём корректный asset id — ошибка произойдёт не на уровне подписи, а в содержимом самого поручения, потому что asset id для perpetual и spot рынков различается. Это значит, что проверка корректности asset id должна быть частью логики бота до отправки, а не полагаться на то, что подпись сама отсечёт неверный запрос.
Первичные источники
Полезные официальные ссылки
- Info endpoint
Hyperliquid Docs.
- Perpetual metadata и asset contexts
Hyperliquid Docs.
- WebSocket subscriptions
Hyperliquid Docs.
- Rate limits и user limits
Hyperliquid Docs.
- Exchange endpoint и отправка ордеров
Hyperliquid Docs.
Полезные материалы
