DEX · Drift Protocol

Drift Protocol SDK: Инфраструктура на Solana

Техническое ретроспективное руководство по работе с программным окружением Drift Protocol. Изучите, как разработчики взаимодействовали с децентрализованной книгой ордеров (DLOB), JIT-аукционами и кросс-маржинальным движком через официальные TypeScript и Python SDK.

⚠️ Статус инфраструктуры: Инцидент Апреля 2026

Обратите внимание: Mainnet смарт-контракты Drift Protocol в данный момент заморожены из-за успешной хакерской атаки в апреле 2026 года. Любые запросы к RPC-узлам, попытки инициализации DriftClient или отправки транзакций в основную сеть завершатся с ошибкой программы. Данное руководство предоставляется в образовательных и исследовательских целях для анализа архитектуры протокола, а также для разработчиков, работающих в локальных симуляциях (Devnet/Localhost).

Обзор архитектуры: Solana RPC & Anchor

В отличие от централизованных бирж (с REST/WS серверами) или гибридных ZK-Rollups, Drift Protocol v2 был полностью реализован как набор ончейн-программ (смарт-контрактов) на блокчейне Solana с использованием фреймворка Anchor. Для программного трейдинга не использовались классические "API-ключи". Взаимодействие происходило через отправку подписанных транзакций напрямую в блокчейн.

Безопасность SDK: Управление Keypair

Вместо API-ключа (Account ID / Secret), разработчикам на Solana необходим Solana Keypair (Ed25519). Этот файл (`id.json`) хранит приватный ключ, который обладает полным доступом к вашим средствам.

Ключевые практики безопасности (Solana Botting):

  • Изоляция средств: Использовался отдельный кошелек только для торгового бота, пополняемый минимально необходимым балансом SOL для оплаты комиссий за транзакции.
  • Delegated Keys (Функция Drift): Drift поддерживал систему "делегированных ключей", позволяя назначать горячему ключу бота ограниченные права (только торговля, без возможности вывода средств).
  • Защита RPC: Использование приватных RPC-эндопинтов со скрытыми URL для защиты от DDoS-атак на вашего бота.

Применение SDK: Роли участников сети

Высокая пропускная способность Solana (~400 мс время блока) позволяла разработчикам создавать сложные HFT-стратегии и инфраструктурных ботов, которые поддерживали работоспособность протокола:

  • JIT Makers (Маркетмейкеры): Боты, участвующие в 5-секундных аукционах (Just-in-Time). Они перехватывали рыночные ордера пользователей, предоставляя им нулевое проскальзывание в обмен на комиссии.
  • DLOB Keepers: Оффчейн-агенты, которые поддерживали децентрализованную книгу лимитных ордеров (DLOB). Они мониторили блокчейн и вызывали контракт на исполнение (matching), когда цена оракула (Pyth) достигала лимитной цены пользователя.
  • Liquidators: Боты, отслеживающие здоровье кросс-маржинальных аккаунтов (Health Factor) и ликвидирующие убыточные позиции, забирая процент от ликвидации в качестве награды.

Инициализация среды: TypeScript SDK

Официальный инструмент для разработки — пакет @drift-labs/sdk. Процесс подключения включал в себя следующие шаги:

  1. Настройка Provider: Создание Anchor Provider с привязкой к вашему RPC-узлу (например, Helius) и кошельку (Keypair).
  2. Подписка на аккаунты (WebSockets): Инициализация DriftClient с использованием WebSocket подписок. В Solana это критически важно: клиент должен локально кешировать состояние пулов (DAMM) и аккаунтов пользователей, чтобы не запрашивать их перед каждой сделкой.
  3. Формирование инструкций: SDK компилирует ваши параметры (размер ордера, плечо) в инструкции Solana, подписывает их вашим Keypair и отправляет транзакцию в сеть.

Обработка ошибок (Anchor Program Errors)

Поскольку логика обрабатывалась в смарт-контрактах, коды ошибок были представлены в виде кастомных шестнадцатеричных кодов Anchor. Наиболее частые из них:

Hex-Код Название / Причина Решение (Логика бота)
0x1770 InsufficientCollateral Недостаточно маржи для открытия позиции. Бот должен пересчитывать вес активов (Oracle Price × Margin Weight) перед отправкой.
0x1774 OrderDoesNotExist Попытка отменить или изменить ордер, который уже был исполнен DLOB Keeper'ом. Требуется синхронизация стейта.
0x178A OracleStaleForMargin Цена оракула Pyth устарела в данном блоке. Повторить транзакцию через 1-2 слота (400-800 мс).

Пример кода: Подключение и размещение ордера

TypeScript: Инициализация DriftClient

Пример использования @drift-labs/sdk для подключения к протоколу. Напоминание: данный код не будет работать в Mainnet до полного устранения последствий инцидента 2026 года.

import { Connection, Keypair } from '@solana/web3.js';
import { Wallet, AnchorProvider } from '@coral-xyz/anchor';
import { DriftClient, PublicKey, PositionDirection, OrderType } from '@drift-labs/sdk';

async function initDriftBot() {
  // 1. Инициализация RPC и кошелька
  const connection = new Connection("https://ваша-rpc-нода.solana.com");
  const keypair = Keypair.fromSecretKey(new Uint8Array([/* ВАШ ПРИВАТНЫЙ КЛЮЧ */]));
  const wallet = new Wallet(keypair);
  const provider = new AnchorProvider(connection, wallet, {});

  // 2. Создание клиента Drift 
  // ВНИМАНИЕ: С апреля 2026 контракты заморожены!
  const driftClient = new DriftClient({
    connection,
    wallet: provider.wallet,
    programID: new PublicKey('dRiftyHA39MWEi3m9aunc5MzRF1JzxgPi1U1k864YkQ'), // Drift v2 Program ID
    env: 'mainnet-beta',
  });

  await driftClient.subscribe();
  console.log("Успешное подключение к состоянию Drift!");

  // 3. Пример размещения лимитного ордера (Long SOL-PERP)
  const marketIndex = 0; // Индекс для SOL-PERP
  const txSig = await driftClient.placePerpOrder({
    orderType: OrderType.LIMIT,
    direction: PositionDirection.LONG,
    marketIndex,
    baseAssetAmount: driftClient.convertToPerpPrecision(10), // 10 SOL
    price: driftClient.convertToPricePrecision(150.50),      // $150.50
  });

  console.log("Транзакция отправлена:", txSig);
}

initDriftBot();

Интеграция на Python: driftpy

Для дата-саентистов и разработчиков, специализирующихся на статистическом арбитраже, комьюнити поддерживало библиотеку DriftPy. Библиотека строилась поверх solana-py и anchorpy.

Основным юзкейсом Python-ботов был сбор исторических данных ставок финансирования (Funding Rates) напрямую из блокчейна, расчет метрик для машинного обучения (ML) и выполнение стратегий возврата к среднему (Mean Reversion) на кросс-маржинальных счетах.

→ Общие принципы создания Python-ботов для DEX

Часто задаваемые вопросы (FAQ) по Drift SDK

Почему API Drift Protocol возвращает ошибки таймаута или отказа в обслуживании?

В апреле 2026 года Drift Protocol подвергся масштабной хакерской атаке на логику смарт-контрактов. Чтобы спасти оставшуюся ликвидность, программы на блокчейне Solana были экстренно заморожены управляющим советом (Council). На данный момент любые ончейн-взаимодействия с протоколом отклоняются на уровне блокчейна.

Чем Drift SDK отличается от стандартных REST API (как у Binance)?

Drift — это некастодиальный on-chain протокол. Разработчики не общаются с централизованным сервером матчинга (REST API). Вместо этого SDK сериализует параметры ордера, подписывает их локально вашим криптографическим ключом и транслирует как RPC-транзакцию напрямую валидаторам сети Solana.

Как тестировать ботов, если Mainnet остановлен?

Разработчики могут использовать solana-test-validator для локального форка блокчейна до момента инцидента. SDK позволяет сменить параметр окружения на devnet или local, что дает возможность симулировать торговлю, тестировать DLOB-киперов и готовить алгоритмы к потенциальному перезапуску протокола (Drift v3).

---