Перейти к основному содержанию

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →

Что такое Transaction API?

Raydium Transaction API (Route V2) — это серверный сервис, который создаёт сериализованные транзакции обмена Solana без необходимости поддерживать RPC-соединение на клиенте или включать весь Raydium SDK. Это значительно упрощает интеграцию для:
  • Веб-фронтенда, который не может запустить локального RPC-клиента
  • Мобильных приложений с ограниченными ресурсами
  • Автоматических торговых ботов
  • Агрегаторов и провайдеров кошельков
Вместо выполнения сложной маршрутизации пулов и конструирования транзакций на клиенте вы запрашиваете котировки обмена и построение транзакций у нашего API, а затем подписываете и транслируете результат, используя любой Solana RPC.

Обзор рабочего процесса

Transaction API разделяет задачи на две фазы:

1. Фаза вычислений: получение котировки

Вызовите /compute/swap-base-in или /compute/swap-base-out, чтобы получить ожидаемый результат обмена (или требуемый вход) на основе текущих состояний пулов. Этот endpoint доступен только для чтения и не требует подписей:
GET /compute/swap-base-in?inputMint=EPjF...&outputMint=So111...&amount=1000000&slippageBps=50&txVersion=V0
Ответ включает:
  • Ожидаемый объём выходного токена
  • Разбор маршрута (какие пулы и источники ликвидности используются)
  • Влияние на цену

2. Фаза транзакции: построение и подпись

После получения ответа от вычислительного endpoint передайте его (вместе с кошельком и конфигурацией) в /transaction/swap-base-in или /transaction/swap-base-out:
POST /transaction/swap-base-in
Content-Type: application/json

{
  "wallet": "YourWalletAddress",
  "swapResponse": { ...response from /compute/swap-base-in },
  "txVersion": "V0",
  "computeUnitPriceMicroLamports": "1000",
  "wrapSol": false,
  "unwrapSol": false,
  "inputAccount": "TokenAccount1...",
  "outputAccount": "TokenAccount2..."
}
Ответ содержит:
  • Закодированную в base64 версионированную транзакцию, готовую к подписи
  • Адреса таблиц поиска адресов (если txVersion=V0)
Ваш клиент затем:
  1. Декодирует транзакцию
  2. Подписывает её с помощью keypair пользователя
  3. Транслирует её через любой Solana RPC
  4. Ожидает подтверждения

Вычислительные endpoint

GET /compute/swap-base-in

Случай использования: пользователь указывает сумму входа, мы вычисляем выход. Обязательные параметры запроса:
  • inputMint – адрес mint входного токена
  • outputMint – адрес mint желаемого токена
  • amount – сумма входа в lamports (наименьшая единица)
  • slippageBps – максимально допустимое проскальзывание в базовых пунктах (0–10000)
  • txVersionV0 или LEGACY
Опционально:
  • referrerBps – если у вас есть авторитет рефferrера, базовые пункты выхода, которые нужно собрать в виде комиссии рефferrера

GET /compute/swap-base-out

Случай использования: пользователь указывает желаемый выход, мы вычисляем требуемый вход. Обязательные параметры запроса:
  • inputMint, outputMint, amount (желаемый выход), slippageBps, txVersion
Примечание: нет базовых пунктов рефферера для base-out (ещё не реализовано).

Endpoint транзакций

POST /transaction/swap-base-in

Построение транзакции для фиксированной суммы входа. Обязательное содержимое:
  • wallet – адрес вашего подписывающего кошелька
  • swapResponse – весь объект вычислительного ответа
  • txVersion – версия транзакции
  • computeUnitPriceMicroLamports – плата за приоритет в микро-lamports
Опционально:
  • wrapSol – если true, обернуть нативный SOL для входа
  • unwrapSol – если true, развернуть WSOL в SOL на выходе
  • inputAccount – аккаунт токена для входа (обязателен, если не оборачивается SOL)
  • outputAccount – аккаунт токена для выхода
  • nonceInfo – долговечный nonce для автономной подписи
  • jitoInfo – параметры пакета защиты от MEV Jito
  • referrerWallet – кошелёк рефferера для сбора комиссии

POST /transaction/swap-base-out

Построение транзакции для фиксированной суммы выхода. Те же параметры, что и base-in, за исключением:
  • поле referrerInfo в настоящее время закомментировано (ещё не реализовано)

Конверт ответа

Все endpoint возвращают стандартный конверт:
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "success": true,
  "version": "V1",
  "data": { ... }
}
При ошибке success имеет значение false, а msg содержит код ошибки (например, REQ_WALLET_ERROR, REQ_SLIPPAGE_BPS_ERROR).

Форма ответа транзакции

Успешный ответ транзакции выглядит так:
{
  "id": "...",
  "success": true,
  "version": "V1",
  "data": {
    "transaction": "AgABB...",  // Base64-кодированная транзакция
    "addressLookupTableAddresses": ["Address1...", "Address2..."]  // Только для V0
  }
}

Пример интеграции

Вот типичный поток в псевдокоде:
// 1. Получить котировку
const quote = await fetch(
  'https://transaction-v1.raydium.io/compute/swap-base-in?' +
  'inputMint=EPjF...&outputMint=So111...&amount=1000000&slippageBps=50&txVersion=V0'
).then(r => r.json());

// 2. Проверить котировку
if (!quote.success) {
  throw new Error(quote.msg);
}

// 3. Построить транзакцию
const tx = await fetch(
  'https://transaction-v1.raydium.io/transaction/swap-base-in',
  {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      wallet: userWalletAddress,
      swapResponse: quote,
      txVersion: 'V0',
      computeUnitPriceMicroLamports: '1000',
      inputAccount: userInputTokenAccount,
      outputAccount: userOutputTokenAccount,
    }),
  }
).then(r => r.json());

// 4. Декодировать и подписать
const transaction = VersionedTransaction.deserialize(
  Buffer.from(tx.data.transaction, 'base64')
);
transaction.sign([userKeypair]);

// 5. Отправить через RPC
const rpc = new Connection('https://api.mainnet-beta.solana.com');
const sig = await rpc.sendTransaction(transaction);
await rpc.confirmTransaction(sig);

Объяснение ключевых параметров

txVersion

  • V0: современная транзакция Solana с таблицами поиска адресов (ALTs). Меньший размер сериализации, более низкие комиссии.
  • LEGACY: формат транзакции до ALT. Больше, но работает со всеми RPC endpoint.
Выбирайте V0 по возможности; переходите на LEGACY, если ваш RPC или кошелёк не поддерживает ALT.

computeUnitPriceMicroLamports

Плата за приоритет для более быстрого включения в блок. Установите на 0 для отсутствия платы за приоритет или на более высокие значения (например, 1000) для конкуренции в перегруженных сетях. Единицы — микро-lamports за вычислительную единицу.

slippageBps

Максимальная толерантность к проскальзыванию в базовых пунктах. 100 = 1%, 50 = 0,5%.
  • Используйте более низкие значения (например, 25–50 bps) для большинства стабильных обменов
  • Увеличивайте для волатильных или низколиквидных пар

wrapSol и unwrapSol

  • wrapSol: если true, API оборачивает ваш нативный SOL в WSOL. inputAccount не требуется.
  • unwrapSol: если true, API разворачивает выходной WSOL обратно в нативный SOL. outputAccount не требуется.
Если оба имеют значение false, вы должны предоставить явные аккаунты токенов.

Сетевые endpoint

СетьMainnetDevnet
Hosttransaction-v1.raydium.iotransaction-v1-devnet.raydium.io
ПротоколHTTPSHTTPS

Коды ошибок

Распространённые сообщения об ошибках:
КодЗначение
REQ_SLIPPAGE_BPS_ERRORПроскальзывание недействительно или выходит за допустимые пределы
REQ_INPUT_MINT_ERRORАдрес входного mint недействителен
REQ_OUTPUT_MINT_ERRORАдрес выходного mint недействителен
REQ_AMOUNT_ERRORСумма не является допустимым числом
REQ_TX_VERSION_ERRORtxVersion должен быть V0 или LEGACY
REQ_WALLET_ERRORАдрес кошелька недействителен
REQ_INPUT_ACCOUT_ERRORАккаунт входного токена отсутствует или недействителен
REQ_OUTPUT_ACCOUT_ERRORАккаунт выходного токена отсутствует или недействителен
UNKNOWN_ERRORОшибка на сервере; проверьте параметры вашего запроса

См. также