メインコンテンツへスキップ

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.

このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →

トランザクション API とは

Raydium トランザクション API(Route V2)は、クライアントが RPC 接続を維持したり Raydium SDK 全体をバンドルしたりすることなく、シリアライズされた Solana スワップトランザクションを構築するサーバー側サービスです。以下の統合を大幅に簡素化します。
  • ローカル RPC クライアントを実行できない Web フロントエンド
  • リソースが限定されたモバイルアプリケーション
  • ヘッドレストレーディングボット
  • アグリゲーターとウォレットプロバイダー
クライアント側で複雑なプールルーティングとトランザクション構築を行う代わりに、API からスワップクォートとトランザクション構築をリクエストし、任意の Solana RPC を使用して結果に署名してブロードキャストします。

ワークフロー概要

トランザクション API は関心を 2 つのフェーズに分けます。

1. コンピュートフェーズ:クォートを取得

/compute/swap-base-in または /compute/swap-base-out を呼び出して、現在のプール状態に基づいて予想されるスワップ出力(または必要な入力)を受け取ります。このエンドポイントは読み取り専用で、署名は必要ありません。
GET /compute/swap-base-in?inputMint=EPjF...&outputMint=So111...&amount=1000000&slippageBps=50&txVersion=V0
レスポンスに含まれるもの:
  • 予想される出力量
  • ルートの詳細(どのプールとリクイディティソースが使用されているか)
  • プライスインパクト

2. トランザクションフェーズ:構築して署名

コンピュートレスポンスを取得したら、それを(ウォレットと設定とともに)/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. ユーザーのキーペアで署名
  3. 任意の Solana RPC を通じてブロードキャスト
  4. 確認を待機

コンピュートエンドポイント

GET /compute/swap-base-in

ユースケース:ユーザーが入力量を指定し、出力を計算します。 必須クエリパラメータ
  • inputMint – 送信するトークンのミントアドレス
  • outputMint – 必要なトークンのミントアドレス
  • amount – ラムポートでの入力量(最小単位)
  • slippageBps – 最大許容スリッページをベーシスポイントで指定(0~10000)
  • txVersionV0 または LEGACY
オプション
  • referrerBps – リファラー権限がある場合、リファラー手数料として収集する出力のベーシスポイント

GET /compute/swap-base-out

ユースケース:ユーザーが必要な出力を指定し、必要な入力を計算します。 必須クエリパラメータ
  • inputMintoutputMintamount(必要な出力)、slippageBpstxVersion
:base-out ではリファラーベーシスポイントはサポートされていません(まだ実装されていません)。

トランザクションエンドポイント

POST /transaction/swap-base-in

固定入力量のトランザクションを構築します。 必須ボディ
  • wallet – 署名するウォレットアドレス
  • swapResponse – コンピュートレスポンスオブジェクト全体
  • txVersion – トランザクションバージョン
  • computeUnitPriceMicroLamports – マイクロラムポート単位のプライオリティ手数料
オプション
  • wrapSol – true の場合、入力用のネイティブ SOL をラップ
  • unwrapSol – true の場合、出力で WSOL をネイティブ SOL にアンラップ
  • inputAccount – 入力用のトークンアカウント(SOL をラップしない場合は必須)
  • outputAccount – 出力用のトークンアカウント
  • nonceInfo – オフライン署名用の Durable Nonce
  • jitoInfo – Jito MEV 保護バンドルパラメータ
  • referrerWallet – 手数料収集用のリファラーウォレット

POST /transaction/swap-base-out

固定出力量のトランザクションを構築します。 base-in と同じパラメータ、ただし以下の例外:
  • referrerInfo フィールドは現在コメントアウトされています(まだ実装されていません)

レスポンスエンベロープ

すべてのエンドポイントは標準エンベロープを返します。
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "success": true,
  "version": "V1",
  "data": { ... }
}
エラーが発生した場合、successfalse で、msg にはエラーコード(例:REQ_WALLET_ERRORREQ_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:アドレスルックアップテーブル(ALT)を使用した最新の Solana トランザクション。シリアライズサイズが小さく、手数料が低い。
  • LEGACY:ALT 以前のトランザクション形式。サイズが大きいですが、すべての RPC エンドポイントで機能します。
可能な場合は V0 を選択。RPC またはウォレットが ALT をサポートしない場合は LEGACY にフォールバック。

computeUnitPriceMicroLamports

ブロック включぬ取を高速化するプライオリティ手数料。プライオリティ手数料なしの場合は 0、またはネットワークが混雑している場合は競争するためにより高い値(例:1000)を設定します。単位はコンピュートユニットあたりのマイクロラムポート。

slippageBps

最大スリッページ許容度をベーシスポイント単位で指定。100 = 1%、50 = 0.5%。
  • ほとんどの安定したスワップに低い値(例:25~50 bps)を使用
  • 変動性が高いまたは流動性が低いペアの場合は増加させる

wrapSolunwrapSol

  • wrapSoltrue の場合、API がネイティブ SOL を WSOL にラップします。inputAccount は不要です。
  • unwrapSoltrue の場合、API が出力 WSOL をネイティブ SOL にアンラップします。outputAccount は不要です。
両方が false の場合は、明示的なトークンアカウントを提供する必要があります。

ネットワークエンドポイント

ネットワークMainnetDevnet
ホストtransaction-v1.raydium.iotransaction-v1-devnet.raydium.io
プロトコルHTTPSHTTPS

エラーコード

一般的なエラーメッセージ:
コード意味
REQ_SLIPPAGE_BPS_ERRORスリッページが無効または範囲外
REQ_INPUT_MINT_ERROR入力ミントアドレスが無効
REQ_OUTPUT_MINT_ERROR出力ミントアドレスが無効
REQ_AMOUNT_ERROR金額が有効な数値ではない
REQ_TX_VERSION_ERRORtxVersion は V0 または LEGACY である必要があります
REQ_WALLET_ERRORウォレットアドレスが無効
REQ_INPUT_ACCOUT_ERROR入力トークンアカウントが見つからないか無効
REQ_OUTPUT_ACCOUT_ERROR出力トークンアカウントが見つからないか無効
UNKNOWN_ERRORサーバー側エラー。リクエストパラメータを確認してください

関連ドキュメント