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

SolanaにおけるJupiter Swapの着陸率を向上させるためのヒント

更新日:
2026年3月20日

Solanaネットワーク上のトランザクションを最適化することは、特にネットワークトラフィックが集中している期間において、トランザクションがブロックに確実に組み込まれるようにするために極めて重要です。これはJupiterでのスワップにおいて特に必要とされます。なぜなら、Jupiterでは毎日数百万件のトランザクションが正常に処理されており、そのトランザクションには比較的高い計算能力が求められるからです。本ドキュメントでは、Jupiter APIまたはMetis Jupiter Swap APIを使用する際、Jupiterスワップのトランザクションのパフォーマンスと信頼性を向上させるための主要な戦略について概説します。

取引がブロックに組み込まれ、ネットワークによって迅速に確認される可能性を高めるために、いくつかの対策があります。具体的には以下の通りです:


中間トークンの制限

Jupiter Swaps を利用する際、スワップに使用される中間トークンを制限することができます。これにより、流動性が低くスリッページが大きいトークンペアを経由してスワップが行われるのを防ぐことができ、これらはいずれも取引の失敗につながる可能性があります。

中間トークンを制限するには、 restrictIntermediateTokens パラメータを true ~を作成する際は 引用 リクエスト。これにより、流動性が高くスリッページが小さいトークンペアを通じてのみスワップが行われるようになります。

使用例

curl -G "https://public.jupiterapi.com/quote" \
--data-urlencode "inputMint=So11111111111111111111111111111111111111112" \
--data-urlencode "outputMint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" \
--data-urlencode "amount=100000000" \
--data-urlencode "restrictIntermediateTokens=true"

適切なスリッページを設定する

分散型取引所(DEX)で取引を実行する際、「スリッページ」とは、予想価格と実際に約定した価格との差を指します。スリッページチェックはオンチェーンで実行され、取引が指定されたスリッページ許容範囲内で約定していることを確認します。この範囲外の場合、取引は失敗となります。

適切なスリッページ許容値を設定することは極めて重要です:

  • 高すぎる:取引がMEV攻撃の標的となる可能性があります(例:USDC/PYUSDのような安定したペアでスリッページを10%に設定すると、アービトラージボットがあなたの取引から価値を搾取する可能性があります)
  • 低すぎる:取引が成立しない可能性があります(例:SOL/NEWMEMECOINのような価格変動の激しい通貨ペアでスリッページを0.1%に設定すると、価格変動の際に頻繁に取引が失敗する原因となる可能性があります)(以下のエラーが表示される場合があります) 0x1771 エラー (スリッページ許容値を超えた場合、プログラムのログに記録されます)

静的スリップ

以下の方法を使用して、見積もりを取得する際にスリッページを設定することができます。 引用 あるいは、 スワップ …を使用したメソッドスリッページ(Bps) パラメータ:

スリッページ(Bps) (整数)
スリッページ許容値のベーシス・ポイント(BPS)値。出力トークンの量がスリッページ許容値を超えた場合、スワップ取引は失敗します。100 BPSは1%に相当します。

使用例

curl -G "https://public.jupiterapi.com/quote" \
--data-urlencode "inputMint=So11111111111111111111111111111111111111112" \
--data-urlencode "outputMint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" \
--data-urlencode "amount=100000000" \
--data-urlencode "restrictIntermediateTokens=true" \
--data-urlencode "slippageBps=20"

動的スリッページ

スリッページの上限設定に加え、Jupiterでは、以下の要素に基づいてスリッページの許容範囲を自動的に最適化する動的なスリッページ計算機能を提供しています:

  • 取引されている特定のトークンペア
  • 現在の市場の変動性
  • リアルタイムの市場状況

動的スリッページを有効にするには、次のコードを記述してください。 dynamicSlippage スワップリクエスト内のパラメータ:

curl --location 'https://public.jupiterapi.com/swap' \
--header 'Content-Type: application/json' \
--data '{
"userPublicKey": "USER_PUBLIC_KEY",
"dynamicSlippage": {
"minBps": 50,
"maxBps": 300
},
"quoteResponse": {
// ... response object from quote request
}
}'

このAPIは dynamicSlippageReport これには以下が含まれます:

フィールド説明
スリッページ(Bps)シリアル化されたトランザクションで使用される最適化されたスリッページ
その他金額シミュレーション中に実際に受け取った金額
シミュレートされた発生スリッページ(Bps)シミュレーションによるスリッページの影響
増幅率スリッページを算出するために用いられる増幅率

ダイナミックスリッページにより、スリッページ設定を手動で調整する必要がなくなり、取引ごとに最適な許容範囲を自動的に見極めることで、取引の成功率向上に寄与します。


スリッページリスク

スリッページ許容値の設定や自動化には細心の注意を払ってください。うっかりスリッページ許容値を高く設定しすぎると、取り返しのつかない資金の損失につながる可能性があります。アプリケーションを本番環境にデプロイする前に、スリッページ設定を徹底的にテストしてください。

競争力のある優先手数料

Solanaの手数料優先度システムでは、トランザクションの基本手数料に加えて追加の手数料を設定することができ、これによりトランザクションがリーダーのキュー内でより高い優先順位を得ることができます。優先順位を高めるために入札額を増やすことで、ネットワークによってトランザクションが迅速に承認される可能性が高まります。

Jupiter API を使用して優先手数料を設定するには、いくつかの方法があります:

  1. 以下の機能を使用して、優先手数料指示書を自動生成します。 スワップ メソッド。
  2. 以下の機能を使用して、カスタムパラメータを含む優先手数料指示書を作成します。 スワップ メソッド。
  3. [ ] に優先手数料の金額を指定してください。 スワップ メソッド。

優先手数料指示書の自動生成

その スワップ この方法を使えば、優先手数料の指示書を自動的に作成できます。これを行うには、単に 優先順位設定・手数料・Lamports スワップリクエスト内のパラメータ:

curl --location 'https://public.jupiterapi.com/swap' \
--header 'Content-Type: application/json' \
--data '{
"userPublicKey": "USER_PUBLIC_KEY",
"prioritizationFeeLamports": "auto",
"quoteResponse": {
// ... response object from quote request
}
}'

「auto」を使用した場合、Jupiterは取引の優先手数料を自動的に設定します。その上限は5,000,000 lamports / 0.005 SOLとなります。

カスタムパラメータを使用して優先手数料指示を生成する

Jupiterによる推定方法をより細かく制御したい場合は、 優先度レベルと最大ラムポート数 ~へ 優先順位設定・手数料・Lamports パラメータ。以下を指定できます:

  • maxLamports 優先手数料を特定のラムポート数に上限を設けること、
  • グローバル (ブール値) 手数料がSolanaネットワーク全体で一律に計算されるか、あるいは関連するプログラムのローカルな手数料市場に基づいて計算されるかを示すもの、
  • 優先度レベル 使用する優先料のレベルを示すには(, 高い、または veryHigh).
curl --location 'https://public.jupiterapi.com/swap' \
--header 'Content-Type: application/json' \
--data '{
"userPublicKey": "USER_PUBLIC_KEY",
"prioritizationFeeLamports": {
"priorityLevelWithMaxLamports": {
"maxLamports": 4000000,
"global": false,
"priorityLevel": "veryHigh"
}
},
"quoteResponse": {
// ... response object from quote request
}
}'

優先手数料額の指定

あるいは、lamports単位で特定の優先手数料額を指定することもできます。例えば、次のようにします。

curl --location 'https://public.jupiterapi.com/swap' \
--header 'Content-Type: application/json' \
--data '{
"userPublicKey": "USER_PUBLIC_KEY",
"prioritizationFeeLamports": 1000000,
"quoteResponse": {
// ... response object from quote request
}
}'
適切な優先手数料の算出

Quicknode では、指定されたブロック数にわたる特定のプログラムの直近の優先手数料を取得するための「優先手数料 API」(アドオンの詳細|ドキュメント)を提供しています。

curl https://docs-demo.solana-mainnet.quiknode.pro/ \
-X POST \
-H "Content-Type: application/json" \
-H "x-qn-api-version: 1" \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "qn_estimatePriorityFees",
"params": {
"last_n_blocks": 100,
"account": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
"api_version": 2
}
}'

このメソッドは、 per_compute_unit 最近のネットワーク活動に基づいて算出された優先手数料(マイクロラムポート単位)の見積もりを含むプロパティ。この応答では、4つのカテゴリーごとに手数料の見積もりが示されます: 低い, , 高い、および 極端な.


アクセスが集中する期間における優先手数料

ネットワークの混雑が激しい時期には、トランザクション処理が成功する確率を高めるため、直近の優先手数料の75パーセンタイル以上を設定することをお勧めします。これは、以下のいずれかに相当します。 高い または 極端な によって返される優先手数料 qn_見積もり優先順位手数料 メソッド。

優先手数料に関するリソース

演算ユニットの最適化

コンピュートユニット(CU)を最適化することで、ブロック制限を超過することによるトランザクションの破棄を防ぐことができます。Solana上のすべてのトランザクションは、処理にCUを使用します。このネットワークでは、1つのブロックで処理できるコンピュートユニット数に制限があります。Jupiterでのスワップには、他のSolanaプログラムへの複数のクロスプログラム呼び出しが含まれるため、多くの場合、大量のCUが発生します。コンピュートユニットの詳細については、当社のドキュメントをご覧ください。

スワップ取引が最適な演算ユニット制限で作成されるようにするには、 dynamicComputeUnitLimit パラメータを true ~を作成する際は スワップ リクエスト:

curl --location 'https://public.jupiterapi.com/swap' \
--header 'Content-Type: application/json' \
--data '{
"userPublicKey": "USER_PUBLIC_KEY",
"dynamicComputeUnitLimit": "true",
"quoteResponse": {
// ... response object from quote request
}
}'

これにより、返されるトランザクションには computeBudgetInstruction これは、スワップの複雑度に基づいて演算ユニットの制限を適切な値に設定するものです(最大値である1,400,000演算ユニットを使用するのではなく)。

トランザクション・アセンブリ・アンド・ブロードキャスティング

Jupiter API はシミュレートされたトランザクションを返すため、 skipPreflight パラメータを true トランザクションを送信する際:

const swapTransactionBuf = Buffer.from(swapTransaction, 'base64');
let transaction = VersionedTransaction.deserialize(swapTransactionBuf);
transaction.sign([wallet.payer]);
const rawTransaction = transaction.serialize()
const signature = await connection.sendRawTransaction(rawTransaction, {
skipPreflight: true,
});

以下を使用して、簡単な投票機能を作成します。 getSignatureStatuses お取引の状況を確認するには。

const { value: statuses } = await connection.getSignatureStatuses([signature]);

150スロット(約60秒)経過しても確認されない場合、ブロックハッシュは失効するため、取引を再試行することができます。

Jitoバンドル

あるいは、Jito Bundles を使用して Solana クラスターにトランザクションを送信することもできます。Jito Bundles は Jito Labs が提供する機能で、Solana ブロックチェーン上で複数のトランザクションを順次かつアトミックに実行することを可能にします。詳細については、ガイド「Jito Bundles:その概要と使い方」をご覧ください。要約すると、以下の通りです:

  • バンドルの最後のトランザクションで、バリデータにチップを追加して、正常に処理されるようにする必要があります。また、
  • Jito対応のSolanaエンドポイントを使用してトランザクションを送信する必要があります。このエンドポイントは、「Lil' JIT Marketplace Add-on」に登録することで入手できます。

以下の方法を使用して、バリデータにヒントを追加することができます。 優先順位設定・手数料・Lamports のパラメータ スワップ メソッド:

curl --location 'https://public.jupiterapi.com/swap' \
--header 'Content-Type: application/json' \
--data '{
"userPublicKey": "USER_PUBLIC_KEY",
"prioritizationFeeLamports": {
"jitoTipLamports": 1000000,
},
"quoteResponse": {
// ... response object from quote request
}
}'

その後、Jitoを使ってその取引を送信できます sendTransaction または sendBundle 方法。ぜひ当社の 「Jitoバンドル」ガイド または コード例(Jupiter Swaps と Jito Bundles) 詳細についてはこちらをご覧ください。

DEXと流動性プール

Jupiterでスワップを行う際、APIは最適なレートを確保するため、最も効率的なDEXおよび流動性プールを経由して取引を自動的にルーティングします。設定したパラメータは、ルーティング先や適用されるレートに影響を与えます。このセクションでは、ルーティング先や適用されるレートを調整するために使用できるさまざまなパラメータについて解説します。


Jupiter API とのルート上の相違点

注:ごくまれに(1%未満の確率で)、まったく同じパラメータを渡した場合でも、JupiterのネイティブAPIとMetisで返される見積もりやルートに違いが見られることがあります。 こうした見積もりやルートの違いは、MetisとJupiterが完全に同期していないこと(例えば、いずれかのネットワークで遅延が発生している場合など)に起因している可能性が高く、その結果、Geyserからのルーティングやストリーミングデータにわずかなばらつきが生じることがあります。

また、Jupiterのルートは動的であり、お客様のスワップ取引に最適なレートを見つけられるよう常に最適化が行われている点にもご留意ください。回答内容は、その時点の市場状況に応じて変動します。

レスポンスで返されるルートに影響を与えるために利用できるパラメータをいくつか見てみましょう:

DEXの制限

スワップを特定のDEXや流動性プールに限定したい場合は、 dexes のパラメータ 見積依頼. このパラメータを使用すると、スワップに使用するDEXを指定することができ、これにより流動性の低いLPを回避することができます:

curl --location 'https://public.jupiterapi.com/quote?inputMint=So11111111111111111111111111111111111111112&outputMint=EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm&amount=1000000000&dexes=Meteora'

dexの完全なリストは、 プログラムIDからラベルへの変換 エンドポイント:

curl --location 'https://public.jupiterapi.com/program-id-to-label'

中間トークンの制限

前述したように、中間トークンを制限することで、流動性の低いプールを回避し、スワップの成功率を向上させることができます。このパラメータを使用すると、経路や適用されるレートにばらつきが生じます。これにより、必ずしも適用レートが改善されるとは限りませんが、取引の失敗や流動性の低いプールを回避するのに役立ちます。 中間トークンを制限するには、 restrictIntermediateTokens パラメータを true ~を作成する際は 引用 リクエスト。

皆様からのフィードバックを心よりお待ちしております!❤️

このドキュメントについてご意見やご質問がございましたら、ぜひお知らせください。皆様からのご連絡を心よりお待ちしております!

このドキュメントを共有する