Парадигма Web3: Почему здесь нет стакана ордеров?
В отличие от централизованных бирж (CEX) или ZK-Rollup DEX (как ApeX или dYdX), GMX является пуловым AMM на базе оракулов. У GMX нет стакана ордеров (orderbook) и движка сведения заявок. Вы торгуете напрямую против пулов ликвидности (GM tokens в V2 или GLP в V1).
Безопасность: Ваши ключи, ваши ордера
На GMX не существует понятия "API-ключ" для торговли. Все торговые операции — это ончейн-транзакции. Вашим ключом API является приватный ключ вашего EVM-кошелька.
Ключевые практики безопасности:
- Разделение кошельков: Создайте отдельный EVM-адрес с минимально необходимым балансом для работы бота. Не используйте свой основной кошелек.
- Защита приватных ключей: Храните `PRIVATE_KEY` исключительно в `.env` файлах. Никогда не "хардкодьте" ключи в скриптах.
- Контроль аппрувов (Approvals): Давать аппрув на трату токенов (ERC-20) нужно только официальному смарт-контракту Router платформы GMX. Подробнее о безопасности контрактов — в отчётах аудитов безопасности.
Архитектура GMX V2: Двухэтапное исполнение
Для защиты от фронтраннинга (MEV-атак) и обеспечения точного ценообразования, GMX V2 использует архитектуру с участием Keepers и Chainlink Data Streams. Размещение ордера происходит в два этапа:
- Create Order: Ваш бот вызывает функцию смарт-контракта
ExchangeRouter.createOrder(). Транзакция записывается в блокчейн, резервируя залог, но позиция еще не открыта. - Execution: Децентрализованные Keeper-боты (управляемые GMX или независимые) видят ваш запрос. Они получают сверхбыструю цену от Chainlink Data Streams и выполняют ваш ордер (или отменяют его, если сработало проскальзывание).
Следствие для разработчиков: Вы не получаете подтверждение открытия позиции в той же транзакции. Вам необходимо слушать ончейн-события (Events) контракта EventEmitter для подтверждения.
Применение: Алготрейдинг на пулах GMX
Отсутствие проскальзывания от размера сделки (price impact mitigations) делает GMX популярным среди квантов. Текущие метрики открытого интереса (OI) и объёмов пулов доступны на дашборде статистики GMX:
- Дельта-нейтральный фарминг (Delta-Neutral Hedging): Покупка токенов GM (пул ликвидности, приносящий комиссии) и одновременное открытие шорт-позиции на GMX или CEX для хеджирования ценового риска базового актива.
- Запуск собственного Keeper-бота: Разработчики могут зарабатывать комиссии (Execution fees), запустив собственный узел для обработки ордеров пользователей и ликвидаций.
- Ончейн-арбитраж: Использование флеш-лоанов (Flash Loans) на Arbitrum для арбитража между GMX, Uniswap V3 и Camelot DEX.
Где брать данные? (REST, GraphQL, RPC)
Так как смарт-контракты не подходят для массового запроса исторических данных, инфраструктура GMX разделена на три слоя:
1. Торговля и Балансы (RPC Nodes)
Используйте Ethers.js, Web3.py или Viem для подключения к нодам Arbitrum / Avalanche (Alchemy, Infura, QuickNode). Здесь вы читаете балансы и отправляете транзакции.
2. Исторические данные (The Graph / Subgraphs)
Вся история позиций, ликвидаций, объемов и комиссий агрегируется протоколом The Graph. Вы отправляете запросы GraphQL к официальным сабграфам GMX V2.
3. GMX Stats API (REST)
Официальный публичный API для получения текущего APR пулов, цен маркеров и открытого интереса (Open Interest). Не требует аутентификации.
- Arbitrum:
https://arbitrum-api.gmxinfra.io - Avalanche:
https://avalanche-api.gmxinfra.io
Обработка ошибок (Smart Contract Reverts)
Ошибки при торговле на GMX — это откаты транзакций (Reverts) в блокчейне. Основные причины:
| Revert Reason / Event Error | Причина | Решение |
|---|---|---|
| MaxPriceImpactExceeded | Ваша сделка вызывает слишком большой перекос в пуле (Price Impact). | Уменьшите размер позиции или подождите, пока арбитражеры выровняют баланс пула лонгов/шортов. |
| InsufficientCollateral | Недостаточно маржи для поддержания позиции с учетом комиссий (Execution Fee, Borrow Fee). | Увеличьте initialCollateralAmount при вызове функции создания ордера. |
| Cancellation by Keeper (Slippage) | Ордер был принят в мемпул, но пока кипер его исполнял, цена оракула вышла за ваш лимит проскальзывания. | Расширьте параметр допустимого проскальзывания (slippage) в логике бота, особенно на волатильном рынке. |
Примеры кода: Интеграция с данными GMX
Пример 1: Получение рыночных цен (REST API)
Быстрый способ получить цены всех торгуемых активов без подключения Web3 провайдера:
const fetch = require('node-fetch');
async function getGmxPrices() {
try {
const response = await fetch('https://arbitrum-api.gmxinfra.io/prices/tickers');
const data = await response.json();
// Ищем токен (например, WETH)
const wethData = data.find(item => item.tokenSymbol === 'WETH');
console.log("Текущая цена WETH на GMX:", wethData.maxPrice);
} catch (error) {
console.error("Ошибка:", error);
}
}
getGmxPrices();
Пример 2: Запрос к The Graph (GraphQL)
Получение информации о последних 5 открытых позициях в сети Arbitrum:
const fetch = require('node-fetch');
const query = `
{
positions(first: 5, orderBy: createdAt, orderDirection: desc) {
id
account
marketAddress
sizeInUsd
isLong
}
}`;
async function fetchRecentPositions() {
// Обратитесь к актуальному GMX V2 Subgraph URL в документации GMX
const subgraphUrl = 'https://subgraph.satsuma-prod.com/gmx/gmx-v2-arbitrum/api';
const response = await fetch(subgraphUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ query })
});
const result = await response.json();
console.log(result.data.positions);
}
fetchRecentPositions();
Часто задаваемые вопросы (FAQ) по GMX API
Где получить API ключ для торговли на GMX?
В DeFi на базе AMM (как GMX или Uniswap) нет централизованных серверов, выдающих API-ключи для торговли. Вы формируете транзакции локально с помощью библиотек Ethers.js/Web3.py, подписываете их приватным ключом вашего кошелька и отправляете в сеть Arbitrum или Avalanche через RPC-узлы (Infura, Alchemy).
Как получить данные стакана ордеров (Orderbook) GMX?
У GMX нет стакана ордеров. Это пуловая система. Ваши сделки исполняются против ликвидности пулов (GM токенов), а цена берется из сверхбыстрых оракулов (Chainlink Data Streams). Вы можете запросить доступную ликвидность пула, но не глубину стакана.