mcpField
D
dex-execution

dex-execution

github.com/agiprolabsその他456430 回インストール8 週間前に更新
リポジトリ

dex-execution について

Jupiterを使ったSolanaスワップ実行向けのスキルで、見積もり、トランザクション構築、署名、送信、確認を扱います。実行前の見積もり確認と明示的なユーザー承認をワークフローに含みます。

主な機能

  1. 01Jupiter経由でルート付き見積もりを取得
  2. 02金額、価格影響、ルートを表示
  3. 03スワップトランザクションを構築・シミュレーション
  4. 04トランザクションの署名、送信、確認
  5. 05スリッページ、優先手数料、エラーへの対応

活用シーン

  1. 01SOLやUSDCなどのトークン交換
  2. 02実行前の見積もりと価格影響の確認
  3. 03ネットワーク混雑に応じた優先手数料の設定
  4. 04期限切れやスリッページ超過のトラブル対応

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/agiprolabs/claude-trading-skills --skill dex-execution

インストール後、Claude Code で/dex-executionを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
jupiter_api.md
safety_checklist.md
transaction_lifecycle.md
scripts/
get_quote.py
simulate_swap.py

詳細

DEX の実行 — Jupiter 経由の Solana スワップ実行

Raydium、Orca、Meteora、Phoenix、Lifinity、その他 20 以上の取引所を経由してルートを決定する、主要な DEX アグリゲーター Jupiter を通じて Solana 上でトークンスワップを実行します。

概要

Jupiter は Solana の主要な DEX 全体の流動性を集約し、最適なスワップルートを見つけます。1 回のスワップで複数のプールに分割し、中間トークンを経由して価格への影響を最小限に抑える場合があります。Jupiter v6 API はルートの検出、トランザクションの構築、手数料の最適化を処理し、コード側では見積もり、ユーザーの確認、署名、送信を処理します。

ベース URL: https://quote-api.jup.ag/v6

実行パイプライン

すべてのスワップは、この 7 ステップのパイプラインに従います。ステップ 2〜3(表示と確認)は決して省略しないでください。

ステップ 1 — 見積もりを取得
import httpx

params = {
    "inputMint": "So11111111111111111111111111111111111111112",   # SOL
    "outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC
    "amount": 1_000_000_000,  # 1 SOL in lamports
    "slippageBps": 50,        # 0.5%
}
resp = httpx.get("https://quote-api.jup.ag/v6/quote", params=params)
quote = resp.json()
ステップ 2 — 見積もりをユーザーに表示

続行する前に、必ず以下のフィールドを表示してください。

フィールドソース
入力額quote["inAmount"](トークンの最小単位)
出力額quote["outAmount"]
最低受取額quote["otherAmountThreshold"]
価格への影響quote["priceImpactPct"]
ルートquote["routePlan"] — 使用する DEX
スリッページリクエストした slippageBps
ステップ 3 — ユーザーの確認を必須にする
⚠️  SWAP PREVIEW
    Selling:   1.000 SOL
    Buying:    ~142.50 USDC
    Min recv:  141.79 USDC (0.5% slippage)
    Impact:    0.01%
    Route:     Raydium V4 → USDC

    Proceed? [y/N]

ユーザーから明示的な「はい」がない限り、絶対に続行しないでください。

ステップ 4 — トランザクションを構築
swap_body = {
    "quoteResponse": quote,
    "userPublicKey": "YourPubkeyBase58...",
    "wrapAndUnwrapSol": True,
    "dynamicComputeUnitLimit": True,
    "prioritizationFeeLamports": "auto",
}
resp = httpx.post("https://quote-api.jup.ag/v6/swap", json=swap_body)
swap_data = resp.json()
swap_tx = swap_data["swapTransaction"]  # base64-encoded transaction
ステップ 5 — トランザクションに署名
import base64
from solders.transaction import VersionedTransaction
from solders.keypair import Keypair

raw_tx = base64.b64decode(swap_tx)
tx = VersionedTransaction.from_bytes(raw_tx)
keypair = Keypair.from_base58_string(os.environ["WALLET_PRIVATE_KEY"])
tx.sign([keypair])
ステップ 6 — トランザクションを送信
rpc_url = os.environ.get("SOLANA_RPC_URL", "https://api.mainnet-beta.solana.com")
signed_bytes = bytes(tx)
payload = {
    "jsonrpc": "2.0", "id": 1,
    "method": "sendTransaction",
    "params": [
        base64.b64encode(signed_bytes).decode(),
        {"encoding": "base64", "skipPreflight": False,
         "maxRetries": 3, "preflightCommitment": "confirmed"}
    ],
}
resp = httpx.post(rpc_url, json=payload)
sig = resp.json()["result"]
print(f"Submitted: https://solscan.io/tx/{sig}")
ステップ 7 — トランザクションを確認
import time

for attempt in range(30):
    payload = {
        "jsonrpc": "2.0", "id": 1,
        "method": "getSignatureStatuses",
        "params": [[sig], {"searchTransactionHistory": False}],
    }
    resp = httpx.post(rpc_url, json=payload)
    status = resp.json()["result"]["value"][0]
    if status and status.get("confirmationStatus") in ("confirmed", "finalized"):
        print(f"Confirmed at slot {status['slot']}")
        break
    time.sleep(2)
else:
    print("Transaction not confirmed within 60s — check explorer")

Jupiter API v6 エンドポイント

エンドポイントメソッド用途
/quoteGETルーティングによる最良価格の見積もりを取得
/swapPOST見積もりからスワップトランザクションを構築
/swap-instructionsPOST個別のインストラクションを取得(上級者向け)
/price?ids=token1,token2GET簡易価格照会(v2)
/tokensGETサポート対象のトークンをすべて一覧表示

パラメーターとレスポンスの詳細については、references/jupiter_api.md を参照してください。

主なパラメーター

スリッページ(slippageBps)
トークンの種類推奨範囲備考
SOL、USDC、主要トークン50-100(0.5-1%)流動性が安定
中型トークン100-300(1-3%)流動性が変動
PumpFun/ミームトークン500-2000(5-20%)板が薄く、ボラティリティが高い
新規ローンチ(開始から 1 時間未満)1000-3000(10-30%)ボラティリティが極めて高い
動的スリッページ

スワップリクエストで dynamicSlippage: true を設定すると、現在の市場状況に基づいて Jupiter がスリッページを自動調整します。ほとんどの用途で推奨されます。

優先手数料(prioritizationFeeLamports)

優先手数料によって、ブロック内のトランザクションの順序が決まります。

レベルmicroLamports使用する場面
低10,000-50,000通常時
中50,000-200,000混雑が中程度のとき
高200,000-1,000,000混雑が激しいとき/時間的制約があるとき
緊急1,000,000-5,000,000ミームコインのローンチ、NFT のミント
自動"auto"Jupiter が推定

ほとんどの場合は "auto" を使用してください。細かく制御するには、Helius の getPriorityFeeEstimate を照会してください。

その他のパラメーター
  • onlyDirectRoutes: マルチホップルーティングを省略します。処理は速くなりますが、価格が悪くなる場合があります。
  • asLegacyTransaction: バージョン付きトランザクションではなく、レガシー形式を使用します。一部の古いウォレットで必要です。
  • maxAccounts: トランザクション内のアカウント数を制限します(デフォルトは 64)。値を下げるとルートの選択肢が減りますが、確認の信頼性が向上します。
  • platformFeeBps: インテグレーター手数料(ベーシスポイント単位)。出力額から差し引かれます。
  • wrapAndUnwrapSol: SOL ↔ wSOL のラップ/アンラップを自動化します(デフォルトは true)。
  • dynamicComputeUnitLimit: シミュレーションに基づいてコンピュートバジェットを自動設定します。

優先手数料の推定

# Using Helius getPriorityFeeEstimate
helius_url = f"https://mainnet.helius-rpc.com/?api-key={HELIUS_KEY}"
payload = {
    "jsonrpc": "2.0", "id": 1,
    "method": "getPriorityFeeEstimate",
    "params": [{"accountKeys": [input_mint, output_mint],
                "options": {"recommended": True}}],
}
resp = httpx.post(helius_url, json=payload)
fee = resp.json()["result"]["priorityFeeEstimate"]

トランザクション確認戦略

Solana のトランザクションライフサイクルの全容については、references/transaction_lifecycle.md を参照してください。

  1. 送信:明らかなエラーを検出できるよう、skipPreflight: False を指定します
  2. ポーリング:getSignatureStatuses を 2 秒ごとに呼び出し、最大 60 秒間確認します
  3. 確認できない場合:新しいブロックハッシュでトランザクションを再構築して再試行します(最大 3 回)
  4. ブロックハッシュの有効期限:ブロックハッシュの取得から約 60 秒後にトランザクションの有効期限が切れます
  5. 最終確認:トークン残高が想定どおり変化したことを検証します

エラー処理

エラー原因対処方法
"Slippage tolerance exceeded"価格が slippageBps の許容範囲を超えて変動しましたスリッページを増やすか、再試行します
"Insufficient funds"入力トークンまたは手数料用の SOL が不足しています見積もりの前に残高を確認します
"Transaction expired"ブロックハッシュが古すぎます新しいブロックハッシュで再構築します
"Transaction simulation failed"原因はさまざまです。ログを確認してくださいシミュレーションログを解析して根本原因を特定します
"Too many accounts"ルートで使用するアカウントが多すぎますmaxAccounts の値を小さくするか、onlyDirectRoutes を使用します
HTTP 429レート制限に達しました指数的に遅延時間を延ばして再試行します
HTTP 400 "No route found"流動性のある経路がありませんトークンのミントアドレスが正しいか確認し、スリッページを大きくしてみます

安全要件

これらは、あらゆる実行コードで必ず守るべき要件です。

  1. 必ず見積もりの詳細を表示します(金額、価格への影響、ルート)
  2. 必ずユーザーに明示的な確認を求めます。自動実行は絶対にしないでください
  3. シミュレーションモードをデフォルトにします。明示的に有効化されていない限り、署名や送信を行わないでください
  4. 秘密鍵を保存したり、ログに記録したりしないでください。環境変数から読み込み、すぐに使用して破棄します
  5. 100% のスリッページは絶対に使用しないでください。これは一般的な詐欺・悪用の手口です
  6. トークンアドレスを検証します。スワップの前に、ミントアドレスが想定するトークンと一致することを確認します
  7. 価格への影響を確認します。2% を超える場合は警告し、ユーザーが上書きしない限り 10% を超える場合はブロックします
  8. SOL の予備残高を確保します。レンタル料と今後の手数料のために、最低 0.05 SOL を維持します

実行前・実行中・実行後の完全なチェックリストについては、references/safety_checklist.md を参照してください。

他のスキルとの連携

スキル連携内容
slippage-modelingトークンの流動性プロファイルに基づいて、最適な slippageBps を推定します
liquidity-analysis見積もりの前に、プールの深さが取引額に対応できることを検証します
position-sizingリスクパラメーターに基づいて取引額を算出します
risk-management実行の前に、ポートフォリオ全体のエクスポージャー制限を適用します
jupiter-apiJupiter エンドポイントの基盤となる API ドキュメント
helius-api優先手数料の推定とトランザクションの監視

ファイル

リファレンス
  • references/jupiter_api.md — Jupiter v6 API のパラメーターとレスポンスに関する完全なリファレンス
  • references/transaction_lifecycle.md — Solana のトランザクションライフサイクル、優先手数料、再試行戦略
  • references/safety_checklist.md — 実行前・実行中・実行後の検証チェックリスト
スクリプト
  • scripts/get_quote.py — ルート分析付きで Jupiter のスワップ見積もりを取得して表示します
  • scripts/simulate_swap.py — 送信せずにスワップトランザクションを構築してシミュレーションします

コメント