DEX · GMX

Интеграция со смарт-контрактами и API GMX (V2)

Техническое руководство по программному взаимодействию с GMX. Узнайте, как читать данные через The Graph, взаимодействовать с пулами GM и автоматизировать торговые стратегии через вызовы смарт-контрактов на Arbitrum и Avalanche.

Парадигма 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. Размещение ордера происходит в два этапа:

  1. Create Order: Ваш бот вызывает функцию смарт-контракта ExchangeRouter.createOrder(). Транзакция записывается в блокчейн, резервируя залог, но позиция еще не открыта.
  2. 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). Вы можете запросить доступную ликвидность пула, но не глубину стакана.

---