Перейти к основному содержанию
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Raydium не публикует официальный Python SDK. Описанные здесь подходы объединяют три хорошо поддерживаемые библиотеки сообщества: solders (привязки на Rust для примитивов Solana), solana-py (RPC-клиент) и anchorpy (построение инструкций в стиле Anchor из IDL). Такая комбинация покрывает всё, что делает TS SDK, просто менее отполирована.

Окружение

Версии, которые работают вместе на момент написания:
anchorpy периодически отстаёт от версии anchor-lang; для недавно развёрнутой программы Raydium проверьте, что IDL компилируется с вашей закреплённой версией anchorpy, прежде чем публиковать код.

Подключение и ключевая пара

AsyncClient — это асинхронный вариант; синхронный Client доступен для быстрых скриптов, но асинхронный предпочтителен для всего, что отправляет несколько запросов.

Чтение состояния пула

В большинстве боевых приложений состояние пула читается из REST API Raydium (см. sdk-api/rest-api) вместо ручного декодирования on-chain данных — это проще и задержка приемлема для большинства случаев.
Для ботов, требующих минимальной задержки, декодируйте on-chain данные напрямую:
Полный layout находится в src/raydium/cpmm/layout.ts (исходный код на TS); портируйте его в construct по мере необходимости. anchorpy может делать это автоматически на основе IDL — см. ниже.

Построение и отправка свопа

Для простоты используйте endpoint server-built-transaction Raydium. Сервер возвращает готовую к подписанию транзакцию; вам остаётся только добавить свою подпись:
Это быстрейший путь к работающему боту. Котировка сервера действует недолго (≈30 сек); не кешируйте её.

Построение свопа на клиенте (через anchorpy)

Для минимальной задержки или когда вы не можете достучаться до API Raydium (санкционированные регионы, изолированные системы):
Вычисления PDA (observation state, pool authority) следуют тем же формулам, что и в главе CPMM. anchorpy не выводит их автоматически.

Типичная архитектура бота

Распространённая структура Python-бота для Raydium:
Ключевые решения для боевой эксплуатации:
  • RPC-провайдер. Публичные RPC mainnet-а агрессивно ограничивают. Используйте выделенного провайдера (Helius, QuickNode, Triton) для устойчивого трафика.
  • WebSocket для состояния пула. client.account_subscribe(pool_id) отправляет обновления при каждом изменении состояния. Намного плотнее, чем polling.
  • Провайдер приоритетного комиссионера. Helius имеет endpoint getPriorityFeeEstimate; Triton имеет свой. Размер комиссии рассчитывайте на основе 75-го процентиля недавних комиссий на целевой программе.
  • Bundles для чувствительных к MEV сделок. Маршрутизируйте через block engine Jito, если не можете допустить риск sandwich. Python-библиотеки: jito-sdk-python (третьесторонняя, качество варьируется).

Чтение состояния фермы

Метод .account["X"].decode(bytes) в anchorpy возвращает нативный Python-объект, соответствующий структуре из IDL.

Типичные ошибки

1. Обработка десятичных чисел

Нативный Python float — это IEEE-754 double; количества в 9-десятичных минтах (1 SOL = 1e9 единиц) остаются точными, но соотношения и произведения теряют точность. Используйте int (solders возвращает int для всех полей количеств) и проходите через decimal.Decimal для любой цены.

2. Логика на основе слотов vs временных меток

Некоторые версии фермы используют счётчики слотов; LaunchLab использует временные метки. solana-py возвращает slot в RPC-ответах, но преобразование slot → timestamp с потерями (зависит от schedule лидера). Если вам нужно реальное время, явно вызовите get_block_time(slot).

3. Истощение пула соединений

AsyncClient по умолчанию открывает одно HTTP-соединение на запрос. При высокой нагрузке переиспользуйте сессии httpx.AsyncClient и установите подходящий limits=httpx.Limits(max_connections=100).

4. Ограничения размера транзакции

Python-построенные транзакции не меньше TS-построенных — лимит 1232 байта применяется одинаково. Используйте V0-транзакции (таблицы поиска адресов) для всего, что маршрутизируется через более чем ~2 пула.

Дополнительные материалы

Источники: