raptor-dex について
raptor-dexは、Solanaの複数のDEXからスワップ見積もりを集約し、トランザクションを構築するセルフホスト型Rustバイナリです。自前のスワップ基盤を運用する開発者向けで、HTTP APIと任意のリアルタイムWebSocket配信を備え、署名はローカルで行います。
主な機能
- 0125以上のSolana DEXの見積もり集約
- 02マルチホップルーティングとDEX絞り込み
- 03スワップトランザクションと指示の構築
- 04リアルタイムWebSocket見積もり配信
- 05トランザクション状態の追跡
活用シーン
- 01DEX間のトークンスワップ経路の比較
- 02Solanaスワップトランザクションの構築とローカル署名
- 03プール状態の変化に応じた見積もり購読
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agiprolabs/ claude-trading-skills --skill raptor-dexインストール後、Claude Code で/raptor-dexを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/api_reference.mddeployment.mdscripts/raptor_quote.pyraptor_swap.py詳細
Raptor — セルフホスト型 Solana DEX アグリゲーター
Raptor は、25 以上の Solana DEX のスワップ見積もりを集約する、セルフホスト型の Rust バイナリです。Jupiter とは異なり、Raptor は独自のインフラストラクチャ上で実行され、レート制限がなく、API キーも不要で、外部 API の可用性にも依存しません。パブリックベータ期間中は無料です。
- Program ID (Mainnet):
RaptorD5ojtsqDDtJeRsunPLg6GvLYNnwKJWxYE4m87 - GitHub: solanatracker/raptor-binary
- ドキュメント: docs.solanatracker.io/raptor/overview
クイックスタート
# Clone the binary repo (includes required signature file)
git clone https://github.com/solanatracker/raptor-binary
cd raptor-binary
# Run with required environment variables
export RPC_URL="https://your-solana-rpc.com"
export YELLOWSTONE_ENDPOINT="https://your-yellowstone-grpc.com"
export YELLOWSTONE_TOKEN="your-token" # if required by provider
./raptor
# Listens on 0.0.0.0:8080 by default
要件: Solana RPC エンドポイントと Yellowstone gRPC エンドポイント(プールのインデックス作成用)。プールの状態は Yellowstone 経由でストリーミングされるため、通常の動作中に Raptor が使用する RPC 呼び出しはごくわずかです。
signature ファイル: signature ファイルは Raptor バイナリと同じディレクトリに配置する必要があります。このファイルはインスタンスの認証に使用され、リポジトリのクローンに含まれています。バイナリを移動する場合は、signature ファイルも一緒にコピーしてください。
実行フロー
1. GET /quote → Best route across 25+ DEXes
2. POST /swap → Unsigned versioned transaction
3. Sign locally → Your private key never leaves your machine
4. POST /send-transaction → Submit via Yellowstone Jet TPU
5. GET /transaction/{sig} → Confirm status (pending/confirmed/failed/expired)
API エンドポイント
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /quote | マルチホップルーティングによるスワップ見積もりを取得します |
POST | /swap | 見積もりからスワップトランザクションを構築します |
POST | /swap-instructions | スワップ命令のみを取得します(トランザクションラッパーなし) |
POST | /quote-and-swap | 1 回のリクエストで見積もりとトランザクションを取得します |
POST | /send-transaction | Yellowstone Jet TPU 経由で自動再試行付きで送信します |
GET | /transaction/:signature | トランザクションのステータスと解析済みイベントを追跡します |
GET | /health | ヘルスチェック(プール、キャッシュ、Yellowstone 接続) |
見積もりを取得する
import httpx
RAPTOR = "http://localhost:8080"
resp = httpx.get(f"{RAPTOR}/quote", params={
"inputMint": "So11111111111111111111111111111111111111112", # SOL
"outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC
"amount": 1_000_000_000, # 1 SOL in lamports
"slippageBps": 50,
})
quote = resp.json()
print(f"Output: {quote['amountOut']} lamports")
print(f"Price impact: {quote['priceImpact']}%")
print(f"Route: {len(quote['routePlan'])} hops")
見積もりパラメーター
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
inputMint | string | はい | 入力トークンのミントアドレス |
outputMint | string | はい | 出力トークンのミントアドレス |
amount | integer | はい | 最小単位(lamports)での金額 |
slippageBps | string | いいえ | ベーシスポイントまたは "dynamic"(デフォルト: 50) |
dexes | string | いいえ | DEX のカンマ区切りフィルター |
excludeDexes | string | いいえ | 除外する DEX |
maxHops | integer | いいえ | 1~4 ホップ(デフォルト: 4) |
directRouteOnly | boolean | いいえ | シングルホップのルートのみ |
pools | string | いいえ | プールアドレスのカンマ区切りフィルター |
feeBps | integer | いいえ | プラットフォーム手数料 0~1000 bps |
feeAccount | string | いいえ | 手数料の受取ウォレット |
スワップを構築して署名する
import base64
import os
# Step 2: Build transaction from quote
resp = httpx.post(f"{RAPTOR}/swap", json={
"quoteResponse": quote,
"userPublicKey": "YOUR_WALLET_PUBKEY",
"wrapUnwrapSol": True,
"txVersion": "v0",
"priorityFee": "auto", # min|low|auto|medium|high|veryHigh|turbo|unsafeMax
"maxPriorityFee": 100_000, # cap in lamports
})
swap = resp.json()
# swap["swapTransaction"] is base64-encoded unsigned transaction
# Step 3: Sign locally (private key never sent to Raptor)
from solders.transaction import VersionedTransaction
from solders.keypair import Keypair
tx_bytes = base64.b64decode(swap["swapTransaction"])
tx = VersionedTransaction.from_bytes(tx_bytes)
keypair = Keypair.from_base58_string(os.getenv("PRIVATE_KEY"))
signed_tx = VersionedTransaction(tx.message, [keypair])
signed_b64 = base64.b64encode(bytes(signed_tx)).decode()
# Step 4: Submit via Yellowstone Jet TPU
resp = httpx.post(f"{RAPTOR}/send-transaction", json={
"transaction": signed_b64,
})
result = resp.json()
print(f"Signature: {result['signature']}")
# Step 5: Track status
resp = httpx.get(f"{RAPTOR}/transaction/{result['signature']}")
status = resp.json()
# status: pending | confirmed | failed | expired
print(f"Status: {status['status']}, Latency: {status.get('latency_ms')}ms")
WebSocket ストリーミング
プールの状態が変化したときに、スロットベースで更新されるリアルタイムの見積もりストリーミングです。
import asyncio, websockets, json
async def stream_quotes():
async with websockets.connect("ws://localhost:8080/stream") as ws:
await ws.send(json.dumps({
"type": "subscribe",
"inputMint": "So11111111111111111111111111111111111111112",
"outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"amount": 1_000_000_000,
"slippageBps": "50",
}))
async for msg in ws:
data = json.loads(msg)
if data.get("type") == "quote":
print(f"Out: {data['data']['amountOut']} (slot {data['data']['contextSlot']})")
/stream/swap のバリアントは署名可能なトランザクションを事前に構築し、期限切れを防ぐために 10 スロットごとに自動で再送信します。
対応 DEX(25 以上)
Raydium: AMM、CLMM、CPMM、LaunchLab | Meteora: DLMM、Dynamic AMM、DAMM V2、Curve、DBC | Orca: Whirlpool v1/v2 | ボンディングカーブ: Pump.fun、Pumpswap、Heaven、MoonIt、Boopfun | PropAMM: Humidifi、Tessera、Solfi V1/V2、AlphaQ、ZeroFi、BisonFi、GoonFi V2 | その他: FluxBeam、PancakeSwap V3
設定
環境変数
| 変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
RPC_URL | はい | — | Solana RPC エンドポイント |
YELLOWSTONE_ENDPOINT | はい | — | Yellowstone gRPC エンドポイント |
YELLOWSTONE_TOKEN | いいえ | — | 認証トークン(プロバイダーで必要な場合) |
BIND_ADDR | いいえ | 0.0.0.0:8080 | リッスンアドレス |
INCLUDE_DEXES | いいえ | all | DEX のカンマ区切りフィルター |
EXCLUDE_DEXES | いいえ | none | 除外する DEX |
WORKER_THREADS | いいえ | CPU cores | ワーカースレッド数 |
ENABLE_WEBSOCKET | いいえ | false | /stream エンドポイントを有効化します |
ENABLE_YELLOWSTONE_JET | いいえ | false | /send-transaction 用の Jet TPU を有効化します |
ENABLE_ARBITRAGE | いいえ | false | 循環アービトラージルートを有効化します |
CLI フラグ
./raptor --include-dexes raydium,orca,meteora \
--enable-websocket \
--enable-yellowstone-jet \
--workers 4
DEX フィルタリングの例
# Only bonding curve DEXes (for PumpFun sniping)
INCLUDE_DEXES="pumpfun,pumpswap,heaven,moonit,boopfun" ./raptor
# Only major AMMs
INCLUDE_DEXES="raydium,orca,meteora" ./raptor
優先手数料レベル
| レベル | 使用例 |
|---|---|
min / low | コスト削減、緊急性がない場合 |
auto / medium | 推奨されるデフォルト |
high / veryHigh | より迅速な確認 |
turbo / unsafeMax | 競争が激しい状況での最大速度 |
Raptor と Jupiter の比較
| 機能 | Raptor | Jupiter |
|---|---|---|
| セルフホスト可能 | はい | いいえ |
| レート制限 | なし(お使いのハードウェアによる) | API レート制限 |
| DEX 対応範囲 | 25 以上 | 30 以上 |
| レイテンシ | ネットワーク内 | リモート API |
| コスト | 無料(ベータ版) | 無料(ホスティング) |
| トランザクション送信 | Yellowstone Jet TPU | 標準 RPC |
| オンチェーンプログラム | RaptorD5o... | JUP... |
| API キーが必要 | いいえ | いいえ |
デプロイ
Docker、Fly.io、ベアメタルのセットアップについては、references/deployment.md を参照してください。
ファイル
リファレンス
references/api_reference.md— リクエスト/レスポンススキーマを含む HTTP および WebSocket API の完全なリファレンスreferences/deployment.md— 署名ファイルの処理を含む、Docker、Fly.io、ベアメタルへのデプロイ- docs.solanatracker.io/raptor/overview — Raptor の公式ドキュメント
- github.com/solanatracker/raptor-binary — バイナリリリースと README
スクリプト
scripts/raptor_quote.py— --demo モードでスワップの見積もりを取得して比較scripts/raptor_swap.py— スワップの全フロー:見積もり → ビルド → 署名 → 送信 → 確認(--demo ではシミュレーションのみ)