Solanaのトランザクションが失敗する理由:5つの修正方法
Learn why Solana transactions fail and how to fix them. Covers blockhash expiry, priority fees, slippage, compute units, and RPC issues with step-by-s...
この実践的なガイドでは、Solanaのトランザクション失敗に対する5つの具体的な修正方法と、失敗の再発を防ぐための手順に焦点を当てています。
Solanaのトランザクションが失敗する理由は主に5つあります:
- ネットワークがトランザクションを承認する前にブロックハッシュの期限が切れた
- 現在のネットワーク需要に対して優先手数料が低すぎた
- 分散型プラットフォームでのスワップでスリッページ許容度を超えた
- 実行中にコンピュートユニットの予算が不足した
- ウォレットをネットワークに接続しているRPCノードが過負荷状態だった
✅ 資産は安全です
失敗したSolanaトランザクションによってウォレットからトークンが差し引かれることはありません。あなたのSOLやトークンは元の場所にそのまま残ります。失われる可能性があるのは、通常0.001ドル未満のごく少額のネットワーク基本手数料のみです。スワップ額、送金額、または暗号資産のミント価格が請求されることはありません。
このページの内容:
- Solanaのトランザクションが失敗する理由:何が起きているのか
- Solanaトランザクション失敗の5つの根本原因
- Solanaエラーメッセージの解読
- 失敗したSolanaトランザクションの修正方法
- プラットフォーム固有の失敗
- Solanaはダウンしている?ネットワークステータスの確認方法
- 失敗したトランザクションでも手数料は発生するか?
- トランザクション実行前チェックリスト
- Solanaトランザクションの失敗に関するよくある質問
- まとめ:エラーに合った適切な修正方法を見つける
Solanaのトランザクションが失敗する理由:何が起きているのか
価格変動が起きている最中にSolanaのトランザクションが失敗するのを見るのは、特にエラーメッセージが役に立たない場合はストレスが溜まるものです。Jupiter、Raydium、Orca、またはMagic Edenでのスワップ、ミント、送金が失敗した場合、その原因はほぼ常に5つのうちのいずれかであり、それぞれに特定の修正方法があります。
トークンスワップ、流動性提供、レンディングプロトコル、暗号資産のミントを含むSolanaの分散型金融(DeFi)エコシステム全体において、価格はミリ秒単位で動くため、トランザクションの失敗は実質的な経済的損失につながります。Solanaのアーキテクチャは、ほとんどのブロックチェーンよりも高速かつ安価ですが、同時にEthereumや他のチェーンに慣れたユーザーが予期しないような失敗モードも生み出します。遅いトランザクションがキューで待機するネットワークとは異なり、Solanaは「Gulf Stream」と呼ばれるトランザクション転送プロトコルを使用しており、即座に処理できないトランザクションは破棄されます。キューは存在しません。失敗したトランザクションは、正しい設定で能動的に再送する必要があります。
このガイドでは、暗号資産ウォレット(PhantomやBackpackなど)、Jupiter、Raydium、Orca、Magic Edenでの失敗について解説します。もし今日、Solana自体に問題が発生している疑いがある場合は、設定のトラブルシューティングを行う前にネットワークステータスセクションへ進んでください。
Solanaトランザクション失敗の5つの根本原因
Solanaのトランザクション失敗は、ネットワークレベルの失敗(ブロックハッシュの期限切れ、混雑、RPCノードの過負荷)と、使用しているアプリケーションを実行するプログラム、すなわちスマートコントラクトによるプログラムレベルの拒否の2つのカテゴリに分けられます。スリッページ許容度のエラーやコンピュート予算のエラーはプログラムレベルの拒否であり、ブロックハッシュの期限切れや優先手数料の不足はネットワークレベルの失敗です。修正方法は、どちらのタイプに直面しているかによって異なります。
SolanaはProof of Historyと呼ばれる計時システムを使用しています。これは暗号化されたシーケンスを生成し、バリデータ同士がタイムスタンプを通信し合うことなく時間に合意できるようにするものです。このシーケンスの各スロットは、トランザクションが最新であることを証明するためにすべてのトランザクションに埋め込まれるタイムスタンプのようなコードである「ブロックハッシュ」を生成します。このスロットベースのアーキテクチャがSolana特有の有効期限ウィンドウを生み出し、他のブロックチェーンとは異なる失敗モードの原因となっています。
原因1:ブロックハッシュの期限切れ
すべてのSolanaトランザクションにはブロックハッシュが含まれており、そのトランザクションが最近作成されたものであることを証明します。ネットワークがトランザクションを承認する前にこのブロックハッシュの期限が切れると、Solanaはそのトランザクションを完全に破棄します。
各ブロックハッシュは約150スロットの間有効で、これは通常の状態では約60秒から90秒に相当します。ネットワーク混雑時には、バリデータの処理が追いつかなくなるため、相対的にトランザクションの期限がより早く切れることになります。表示されるエラーメッセージは Blockhash not found(ブロックハッシュが見つかりません)または Transaction expired(トランザクションの期限切れ)です。
Solanaは従来のトランザクションキューの代わりにGulf Streamを使用しているため、破棄されたトランザクションはキューに戻って待機することはありません。消滅します。ウォレットまたは分散型プラットフォームのインターフェースからトランザクションを再度開始し、能動的に再送する必要があります。ウォレットは新しい送信時に自動的に新しいブロックハッシュを取得します。再送の手順については、修正方法3:新しいブロックハッシュで再送するを参照してください。
⚠️ 開発者向けノート
リトライを試みるたびに、必ず
connection.getLatestBlockhash('confirmed')で最新のブロックハッシュを取得してください。リトライ間でブロックハッシュを再利用しないでください。古い状態を避けるため、プロダクション環境ではprocessedではなくconfirmedまたはfinalizedのコミットメントレベルを使用してください。各リトライの前にgetSignatureStatusesを呼び出して、トランザクションが破棄されたのか処理されたのかを検出してください。
原因2:優先手数料が低すぎる
ネットワーク混雑時、トランザクションを処理するコンピュータであるSolanaのバリデータは、優先手数料のレベルに基づいてどのトランザクションを優先的に処理するかを選択します。
優先手数料はバリデータに支払われる任意のアドオン(チップ)であり、コンピュートユニットあたりのマイクロランポート(micro-lamports)で測定されます。1ランポートは0.000000001 SOLに相当し、1マイクロランポートは1ランポートの100万分の1です。人気の暗号資産のローンチや急激な市場変動などのトラフィックが多い期間中、バリデータは高い優先手数料が設定されたトランザクションを優先的に処理します。優先手数料がゼロまたは不十分なトランザクションは、キューに入れられずに破棄されます。
SOL不足エラーの関連原因として、Solanaはネットワーク上でアカウントをアクティブに保つために、「レント免除しきい値(rent-exempt threshold)」と呼ばれる最小残高を維持することをすべてのアカウントに求めています。手数料の支払い後にウォレット残高がこのしきい値を下回る場合、またはトランザクションによって新しいトークンアカウントを作成する際に資金提供に十分なSOLがない場合、トレード自体には十分なSOLがあるように見えても Insufficient funds(資金不足)エラーが表示されます。トランザクション額とは別に、0.05 SOL程度のバッファを常に維持してください。
設定を変更せずに同じトランザクションを再送しても、再び失敗することが多いのはこのためです。正しい手数料レベルの設定に関するガイダンスについては、修正方法1:優先手数料を上げるを参照してください。
⚠️ 開発者向けノート
トランザクションの最初のインストラクションとして
ComputeBudgetProgram.setComputeUnitPrice(microLamports)を追加してください。静的な倍率を使用するのではなく、getRecentPrioritizationFees()をポーリングして動的に見積もってください。手数料レベルはネットワークの需要に応じて変化するため、混雑のスパイク時には静的な値は信頼できなくなります。HTTP 429(レート制限)、503(サービス利用不可)、および接続タイムアウトエラーを監視して、フェイルオーバーのトリガーを検出してください。
原因3:コンピュート予算の超過
すべてのSolanaトランザクションは、コンピュートユニットと呼ばれる処理予算に基づいて実行されます。これはトランザクションに必要な計算量を測定するものです。単純な送金はこの予算をほとんど消費しません。3つまたは4つの流動性プールを経由するマルチホップのスワップのような複雑な操作は、大幅に多くの予算を消費します。
トランザクションが終了する前にコンピュートユニットの予算を使い果たすと、Solanaはそれをキャンセルします。表示されるエラーは Compute budget exceeded (コンピュート予算超過) または Program failed to complete (プログラムの完了失敗) です。
トランザクションを送信する前に、Phantomやその他のウォレットはトランザクションシミュレーションと呼ばれるプレフライトチェックを実行し、実際に送信することなく現在のブロックチェーンの状態に対してトランザクションを実行します。シミュレーションでコンピュートユニットが枯渇することを検知すると、トランザクションをブロックし、 Transaction simulation failed (トランザクションシミュレーション失敗) と表示します。ほとんどのシミュレーション失敗はトランザクションの実際の問題を示していますが、稀に古いステータスデータが原因で、本来成功するはずのトランザクションが誤って失敗することもあります。
最新の DEX インターフェースを使用しているほとんどのユーザーにとって、コンピュートユニットの制限は自動的に設定されます。コンピュート予算エラーが表示された場合は、手動で調整を行う前に、 DEX に内蔵されている再試行ボタンを使用してください。詳細な手順については、「修正方法5:コンピュートユニット予算の調整」を参照してください。
⚠️ 開発者向けノート
トランザクションの最初のインストラクションとして
ComputeBudgetProgram.setComputeUnitLimit(units)を追加してください。まずsimulateTransaction()を実行して実際のコンピュートユニット消費量を測定し、次にその消費量に10%のバッファとして1.1を掛けた値を上限として設定します。上限を低く設定しすぎるとInstructionErrorの失敗を引き起こし、高く設定しすぎると手数料予算を浪費しますが、失敗の原因にはなりません。
原因4:スリッページ許容範囲の超過
スリッページ許容範囲とは、分散型取引所( DEX :ウォレットから直接トークンを交換できるプラットフォーム)がユーザーに代わって設定する保護機能です。スワップをリクエストした瞬間から実行される瞬間までの間に、トークンの価格が設定したしきい値を超えて変動した場合、スマートコントラクトは予想より悪い価格からユーザーを保護するためにトランザクションをキャンセルします。
これは保護目的の失敗であり、損失ではありません。元本は安全であり、スワップは実行されませんでした。表示されるエラーは Slippage tolerance exceeded (スリッページ許容範囲超過) です。
スリッページの失敗は、ボラティリティの高いトークン、低流動性の通貨ペア、および価格の見積もりから実行までの遅延が長くなる混雑時に最も頻繁に発生します。流動性プールのリザーブが非常に少ない場合、プールが妥当な価格で取引サイズを調整できないため、5%のスリッページ許容範囲でも十分でないことがあります。その場合は、スワップ額を減らすか、別の通貨ペアへの切り替えを検討してください。
Jupiter、Raydium、Orcaは、この失敗が最も一般的に見られるDEXです。段階的な調整手順については、「修正方法2:スリッページ許容範囲の調整」を参照してください。
原因5:RPCノードの過負荷
Solanaウォレットは、トランザクションを送信するために RPCノード と呼ばれるサーバーに接続します。これは、バリデータネットワークにトランザクションを渡す郵便局のようなものだと考えてください。PhantomやBackpackで「確認」をクリックするたびに、ウォレットはトランザクションをRPCノードに送信し、RPCノードがそれをバリデータに転送します。
Solanaの無料のパブリックRPCエンドポイントはレート制限があり、需要の高い時期には頻繁に過負荷になります。人気の NFT ローンチや急激な市場の動きがある間、パブリックRPCノードは処理能力をはるかに超える送信を受け取り、バリデータに到達する前にトランザクションを破棄します。これが発生すると、 Unable to confirm transaction (トランザクションを確認できません) と表示されたり、エラーメッセージが全く出ないサイレント失敗が発生したりすることがあります。
HeliusやQuickNodeなど、無料プランを提供している専用のRPCプロバイダーに切り替えることで、ネットワークへのより信頼性の高い経路をトランザクションに確保できます。RPCを切り替える手順については、「修正方法4:より良いRPCエンドポイントへの切り替え」を参照してください。
⚠️ 開発者向けノート
アプリケーション設定にバックアップRPCエンドポイントのリストを保持してください。プライマリエンドポイントがエラーを返したりタイムアウトしたりしたときに、自動フェイルオーバーロジックを実装してください。トランザクション確認のモニタリングには、
getSignatureStatusesによるHTTPポーリングではなく、WebSocketのsignatureSubscribeを使用してください。WebSocketサブスクリプションの方が、負荷がかかっている状況でも高速で信頼性が高くなります。
Solanaエラーメッセージの解読:それぞれの意味
失敗したSolanaトランザクションからのエラーメッセージは、ウォレットのアクティビティログ(PhantomまたはSolflare)、Solana Explorer(explorer.solana.com)、またはSolana FM(solana.fm)に表示されます。特定の失敗したトランザクションを調べるには、ウォレットの取引履歴からトランザクション署名をコピーし、いずれかのエクスプローラーに貼り付けます。失敗したトランザクションには、特定のエラーコードと共に赤いエラープレビューが表示されます。
トランザクションを送信する前に、Phantomはシミュレーションを実行して成功するかどうかを予測します。このプレライトチェックが失敗した場合、Phantomは Transaction simulation failed と表示し、送信をブロックします。ほとんどのシミュレーション失敗は設定の実際の問題を示していますが、時折古いデータが誤った失敗を引き起こすことがあります。その場合は、ページを更新して一度再送信するのが適切です。
| エラー文字列 | 失敗タイプ | 平易な日本語での意味 | 即時の修正方法 |
|---|---|---|---|
Transaction simulation failed | ネットワークまたはプログラムレベル | Phantomのプレフライトチェックが、このトランザクションは失敗すると予測しました。原因はスリッページ、資金不足、または古い状態である可能性があります。 | Phantomのエラーコンテキストを確認し、スリッページまたはSOL残高を調整します。修正方法1または修正方法2を参照してください。 |
Blockhash not found / Transaction expired | ネットワークレベル | ネットワークが処理する前にトランザクションのブロックハッシュの期限が切れました。トランザクションはキューに入れられず破棄されました。 | 最初から再送信してください。「修正方法3:新しいブロックハッシュ」を参照してください。 |
Slippage tolerance exceeded | プログラムレベル | 実行前にトークンの価格が設定したしきい値を超えて変動しました。元本は安全です。 | スリッページ許容範囲を広げてください。「修正方法2:スリッページ許容範囲」を参照してください。 |
Insufficient funds for fee | ネットワークレベル | ウォレットにトランザクション手数料、または新しいトークンアカウントのレント免除しきい値をカバーするのに十分なSOLがありません。 | SOLを追加してください。トランザクション額とは別に、0.05 SOLのバッファを維持してください。 |
Compute budget exceeded / Program failed to complete | プログラムレベル | 終了する前にトランザクションの計算予算がなくなりました。マルチホップスワップで最も一般的です。 | DEX に内蔵されている再試行ボタンを使用してください。「修正方法5:コンピュートユニット予算」を参照してください。 |
InstructionError: custom program error: [code] | プログラムレベル | アプリケーションのスマートコントラクトがトランザクションを拒否しました。数値コードはアプリケーション固有のものです。 | そのエラーコードについて、 DEX またはdAppのドキュメントを確認してください。パラメータを調整して再送信してください。 |
Transaction was not confirmed in 30.00 seconds | ネットワークレベル | トランザクションは送信されましたが、タイムアウト期間内に確認されませんでした。破棄された可能性も、そうでない可能性もあります。 | 再送信する前にSolana Explorerでトランザクションが着地したかどうかを確認してください。修正方法3を参照してください。 |
Account not found | プログラムレベル | 必要なアカウント(多くの場合、新しいトークンのトークンアカウント)がまだ存在しません。 | 最新の DEX インターフェースはこれを自動的に解決します。問題が解決しない場合は、ウォレットのトークンアカウント設定を確認してください。 |
失敗したSolanaトランザクションの修正方法
クイック修正チェックリスト(どれが当てはまるか不明な場合は、修正方法1から始めてください):
- 優先手数料を「高速」または「ターボ」に上げて再送信する
- スリッページ許容範囲を0.5%〜1%引き上げて再送信する
- 新しいブロックハッシュで再送信する(5秒待ってから、 DEX から再度開始する)
- ウォレット設定で専用のRPCエンドポイントに切り替える
- 混雑が疑われる場合は、再試行する前に status.solana.com でSolanaネットワークのステータスを確認する
活発な取引期間中に発生する失敗したトランザクションの大部分は、不十分な優先手数料が原因であるため、不明な場合は修正方法1から始めるのが正解です。
修正方法1:優先手数料を上げる
混雑期におけるトランザクション失敗の最も効果的な解決策は、優先手数料(Priority Fee)を引き上げることです。これにより、手数料の低い送信よりも優先的にトランザクションを処理するようバリデータに促すことができます。
手数料レベルはネットワークの需要によって変動します。ウォレットの自動見積もり機能を使用するか、Solana Beach で現在のネットワーク状況を確認してください。特定の lamport 値は急速に変化するため、それらに依存しないでください。
優先手数料ティアのリファレンス:
| 手数料ティア | 使用する場面 | Jupiter の場合 | Phantom の場合 |
|---|---|---|---|
| 自動 / 標準 | 低トラフィック時、単純な送金 | 自動 | マーケット |
| 高速 | アクティブな取引時間、中程度の混雑時 | 高速 | 高 |
| ターボ | ピーク時の混雑、NFT ミント、競争の激しい取引 | ターボ | カスタム (最大) |
| カスタム | 精密な制御またはプログラムによる使用 | micro-lamports を入力 | micro-lamports を入力 |
Jupiter で優先手数料を引き上げる方法 (インターフェースはバージョンにより異なる場合があります):
- jup.ag で Jupiter を開く
- スワップパネルの設定ギアアイコンをクリック
- [Priority Fee] を選択
- [Fast] または [Turbo] を選択するか、[Custom] で値を入力
- スワップを再送信する
Phantom で優先手数料を引き上げる方法:
- Phantom ウォレットを開く
- [設定] に移動
- [トランザクション] を選択
- [トランザクション速度] を [高] または [カスタム] に調整
- DEX に戻り、再送信する
Raydium の場合は、スワップインターフェースの設定ギアをクリックし、[Priority Fee] を選択して、より高いティアを選んで再送信してください。プラットフォーム別の失敗テーブル には、各プラットフォームの正確なナビゲーションパスが記載されています。
⚠️ 開発者向けノート
トランザクションの最初のインストラクションとして
ComputeBudgetProgram.setComputeUnitPrice(microLamports)を追加してください。静的な倍率を使用するのではなく、getRecentPrioritizationFees()を呼び出して現在のネットワーク手数料のパーセンタイルを取得してください。過払いは SOL の無駄になりますが、トランザクションの失敗の原因にはなりません。
解決策 2: スリッページ許容度を調整する
スワップがスリッページ許容度のエラーで失敗した場合、解決策は許容できる価格範囲を広げることですが、その広げる幅が重要です。
⚠️ 重要な警告
流動性の低いトークンペアでスリッページを 3% ~ 5% 以上に設定すると、ボットが保留中のトランザクションを検出し、先回りして利益を抽出する MEV サンドイッチ攻撃のリスクにさらされます。スリッページは一度に大きく上げるのではなく、段階的に引き上げてください。
Jupiter でスリッページを調整する方法 (インターフェースはバージョンにより異なる場合があります):
- Jupiter を開き、設定ギアアイコンをクリック
- [Slippage Tolerance] を選択
- 現在の設定を 0.5% ~ 1% 引き上げる (例: 0.5% から 1.5% へ)
- スワップを再送信する
Raydium の場合: 設定ギアをクリックし、[Slippage] を選択して調整後のパーセンテージを入力し、再送信します。Orca の場合: [Settings] をクリックし、[Slippage Tolerance] を調整して再送信します。プラットフォーム別の失敗テーブル には、各 DEX の正確なナビゲーションパスが記載されています。
Jupiter を使用している場合は、インターフェースで動的スリッページ (Dynamic Slippage) 機能が利用可能か確認してください。この機能は、現在の市場状況に基づいて各取引の最適なスリッページを自動的に計算します。
スリッページを 5% に設定してもトークンの失敗が続く場合、問題は価格の動きではなく、プール内の流動性不足である可能性が高いです。スワップ額を減らすか、取引をより小さなトランザクションに分割してみてください。
解決策 3: 新しいブロックハッシュで再送信する
ブロックハッシュの期限切れは再送信によって解決されますが、同じトランザクションオブジェクトを再送することはできません。Solana では、送信ごとに新しいブロックハッシュが必要です。
Solana は従来のトランザクションキューではなく Gulf Stream を使用しているため、ドロップされたトランザクションを「元に戻す」ことはできません。そのトランザクションは消失しています。新しいトランザクションを最初から作成する必要があります。
一般ユーザー (Phantom、Jupiter、Raydium) の場合:
- 失敗後、5 ~ 10 秒待ちます
- 同じ確認画面で再度送信をクリックしないでください
- スワップインターフェースに戻り、最初からトランザクションを開始します
- 再送信時に、ウォレットが自動的に新しいブロックハッシュを取得します
再送信する前に: Solana Explorer (explorer.solana.com) をチェックして、トランザクションが実際には成功していないか確認してください。検索バーにトランザクションのシグネチャを貼り付けます。トランザクションが [Confirmed] と表示されている場合は、再送信しないでください。
⚠️ 開発者向けノート
各リトライの前に
connection.getLatestBlockhash('confirmed')で新しいブロックハッシュを取得してください。エクスポネンシャル・バックオフを実装してください (1 回目のリトライ前に 1 秒、2 回目の前に 2 秒、3 回目の前に 4 秒待機)。ユーザーにエラーを表示する前に、最大リトライ回数を 5 回に設定してください。本番環境でブロックハッシュを取得する際は、processedではなくconfirmedまたはfinalizedのコミットメントレベルを使用してください。
解決策 4: より優れた RPC エンドポイントに切り替える
Solana の無料のパブリック RPC エンドポイント (api.mainnet-beta.solana.com) はレート制限があり、需要が高い時期には頻繁に過負荷になります。そのため、送信されたトランザクションがバリデータに到達する前にドロップされる可能性が高くなります。
Helius や QuickNode などの専用 RPC プロバイダーは、一般的に混雑時のパブリックな Solana メインネット RPC よりも高い信頼性を提供します。両プロバイダーとも、個人ユーザーに適した無料プランを提供しています。
Phantom で RPC を切り替える方法 (インターフェースはバージョンにより異なる場合があります):
- Phantom ウォレットを開く
- [設定] に移動
- [開発者設定] を選択
- [RPC エンドポイントの変更] を選択
- Helius または QuickNode のエンドポイント URL を入力
- 確定してトランザクションを再送信する
Solflare で RPC を切り替える方法:
- Solflare ウォレットを開く
- [設定] に移動
- [ネットワーク] を選択
- [カスタム RPC] を選択し、エンドポイント URL を入力
- 保存してトランザクションを再送信する
⚠️ 開発者向けノート
アプリケーション設定にバックアップ RPC エンドポイントのリストを保持してください。プライマリがエラーを返したりタイムアウトしたりした場合にバックアップに切り替える、自動フェイルオーバーロジックを実装してください。高負荷下では WebSocket 接続の方が高速であるため、トランザクション確認の監視には
getSignatureStatusesによるポーリングではなく、WebSocket のsignatureSubscribeを使用してください。
解決策 5: コンピューティングユニットの予算を調整する
一般ユーザーの場合、Jupiter や Raydium を含むほとんどの最新の DEX インターフェースは、コンピューティングユニット制限を自動的に設定します。Compute budget exceeded (コンピューティング予算を超過しました) というエラーが表示された場合は、手動で設定を調整するのではなく、DEX の内蔵リトライ機能または更新機能を使用してください。
エラーが解消されない場合は、スワップルートの簡素化を試みてください。1 つのプールを経由する直接ルートは、4 つや 5 つのプールを経由する複雑なマルチホップルートよりも消費するコンピューティングユニットが少なくなります。Jupiter では、ルーティング設定の [Direct Route Only] (直接ルートのみ) オプションを探してください。
特定のペアでスワップが継続的に失敗する場合、一時的に需要が高いルートである可能性があります。数分待ってから再送信することで、設定を変更せずに問題が解決することがよくあります。
⚠️ 開発者向けノート
トランザクションの最初のインストラクションとして
ComputeBudgetProgram.setComputeUnitLimit(units)を追加してください。まずsimulateTransaction()を実行して実際のコンピューティングユニット消費量を測定し、次にその消費量に 10% の安全バッファとして 1.1 を掛けた値を制限として設定してください。制限を低く設定しすぎるとInstructionErrorによる失敗の原因となり、高く設定しすぎると失敗はしませんが手数料予算の無駄になります。
プラットフォーム別の失敗: Phantom、Jupiter、Raydium、Magic Eden
Solana の最も一般的な失敗シナリオは、使用しているプラットフォームによって現れ方が異なります。以下の比較表でお使いのプラットフォームを確認し、詳細については該当するセクションを参照してください。
| プラットフォーム | 最も一般的な失敗 | スリッページ設定の場所 | 優先手数料の場所 |
|---|---|---|---|
| Phantom | Transaction simulation failed、SOL残高不足 | N/A (ウォレットのみ) | 設定 → 取引 → トランザクション速度 |
| Jupiter | スリッページ超過、優先手数料不足 | 歯車アイコン → スリッページ許容度 | 歯車アイコン → 優先手数料 (Auto/Fast/Turbo) |
| Raydium | 流動性の低いプールでの高い価格インパクト | 設定の歯車 → スリッページ | 設定の歯車 → 優先手数料 |
| Orca | Whirlpoolの集中流動性ポジションでのスリッページ | 設定 → スリッページ許容度 | 設定 → トランザクション速度 |
| Magic Eden | ミントイベント中のネットワーク混雑 | N/A | ミント開始前のウォレット設定 |
Jupiterのスワップ失敗
Jupiterのマルチホップ・ルーティングは、最良の価格を見つけるためにスワップを複数の流動性プールに送ります。ホップが追加されるたびにコンピューティング・ユニットの消費量が増え、価格変動がスリッページ許容度を超える可能性のあるポイントがもう一つ増えることになります。
Jupiter特有の最も一般的な失敗の2つは、ボラティリティの高いトークンペアでのスリッページ許容度の超過と、優先手数料不足による「Transaction simulation failed」です。どちらも、再送信する前にJupiterの歯車アイコンメニューの設定を調整することで修正されます。
Jupiterの内蔵優先手数料セレクターには、「Normal」、「Fast」、「Turbo」、「Custom」のオプションがあります。活発な取引セッション中は、「Fast」が推奨される最低設定です。NFT のローンチ時や急激な市場の動きがある間は、「Turbo」を使用してください。
一部の古いウォレットは、Jupiterのバージョニングされたトランザクション形式をサポートしていません。スリッページや手数料のエラーではなく、トランザクション形式のエラーが表示される場合は、ウォレットのソフトウェアが最新であることを確認してください。
RaydiumとOrcaのスワップ失敗
RaydiumとOrcaのAMMの失敗は、流動性が限られているプールでの高い価格インパクトから生じることがほとんどです。寛大なスリッページ設定であっても、プールが妥当な価格で取引サイズを受け入れることができません。
RaydiumまたはOrcaでスワップを確定する前に、インターフェースに表示される価格インパクトの割合を確認してください。価格インパクトが2%〜3%を超える場合、その取引サイズはそのプールの利用可能な流動性に対して大きすぎます。スワップ額を減らすか、取引を2つまたは3つの小さなスワップに分割して順次送信してください。
OrcaのWhirlpool集中流動性ポジションでは、スリッページが特に敏感になることがあります。集中プールがアクティブな価格範囲外に移動した場合、スリッページ設定に関係なくトランザクションは失敗します。その場合は、別のプールを試すか、代替経路を自動的に見つけるJupiterのアグリゲーターを経由してください。
Magic Edenと NFT ミントの失敗
Magic Edenでの NFT ミントの失敗は、問題が設定にあるのではなく、通常の DEX の失敗とは異なります。問題は、狭いローンチ期間中に数千のトランザクションが同時に送信されることで、ネットワークが圧倒され、バリデーターが処理される前に優先手数料の低いトランザクションをドロップしてしまうことです。
Candy Machineプログラムを使用した需要の高いミントは、激しい競争を生み出します。ボットが毎秒数百のトランザクションを送信し、パブリックRPCとバリデーターのキューの両方を飽和させます。
需要の高いローンチ中にミントを成功させるための3ステップ・プロトコル:
- ミント期間が始まる前に、優先手数料を「Turbo」またはウォレットで利用可能な最大設定に設定してください
- パブリックなSolana RPCからHeliusやQuickNodeなどの専用プロバイダー(無料プランで十分です)に切り替えてください
- ミントページを完全に読み込み、ウォレットの接続を事前承認した状態にしておきます。ページが更新されるのを待つのではなく、ミントが開始された瞬間にトランザクションを送信してください
ミントのトランザクションが失敗した場合、SOLの元本は自動的に返却されます。消費されるのは、約0.000005 SOLという少額のネットワーク手数料のみです。一部のプロジェクトではアローリストの仕組みやCandy Guardも使用しているため、正しい設定でもトランザクションが失敗し続ける場合は、現在のミントフェーズの資格があるか確認してください。
Solanaはダウンしている?ネットワークステータスの確認方法
ほとんどのSolanaトランザクションの失敗は、ネットワークの停止によって引き起こされるものではありません。ユーザー側の設定や一時的なネットワークの混雑によって発生します。ネットワークが完全に停止する本当の停止(アウトレイジ)は稀であり、公式に発表されます。
3ステップのステータスチェック:
- status.solana.com(Solanaの公式ネットワークステータスページ)にアクセスし、Solana Foundationからのアクティブなインシデントレポートがないか確認します。
- Solana Beach にアクセスし、リアルタイムの秒間トランザクション数(TPS)と平均確定時間を確認します。TPSがアクティブな時の高い失敗率は、停止ではなくネットワークの混雑を示しています。
- r/solana または Solana の Discord を確認してください。多くのユーザーが同時に失敗を報告している場合、ネットワークは混雑しています。数人だけであれば、問題はあなた側の設定にある可能性が高いです。
| 状況 | 対処法 |
|---|---|
| ネットワークは混雑しているがダウンはしていない | 5〜15分待ってから、より高い優先手数料で再送信してください。混雑が解消されるにつれて手数料は自然に下がります。 |
| status.solana.com でネットワーク停止を確認 | 公式の解決発表を待ってください。停止中に再送信を繰り返さないでください。 |
| ネットワークは正常だがトランザクションが失敗し続ける | 修正1から修正5 に戻って設定を確認してください。 |
失敗したSolanaのトランザクションでも手数料を支払う必要がありますか?
はい、Solanaはトランザクションが失敗した場合でも少額の基本トランザクション料金を請求しますが、トークンやスワップ、送金、ミントの元本がウォレットから差し引かれることはありません。
トークンは安全です。スワップや送金が実行される前にトランザクションが失敗したためです。
基本料金はシグネチャあたり約0.000005 SOLで、ほとんどのSOL価格において1セントの数分の一に相当します。この手数料は、成功しなかった場合でもトランザクションの試行を処理したバリデーターに補償するためのものです。優先手数料を含めていた場合は、その額も消費されます。スワップしようとしていたトークンの量、送ろうとしていたSOL、または支払おうとしていた NFT の価格が差し引かれることはありません。
バリデーターに到達する前に過負荷のRPCノードによって暗黙的にドロップされたトランザクションは、オンチェーンの記録が残らないため、手数料は一切かかりません。
失敗したトランザクションで実際にいくら手数料が請求されたかを確認する方法:
- ウォレットの取引履歴からトランザクションシグネチャをコピーします
- それを Solana Explorer または Solana FM に貼り付けます
- 赤いエラー・ステータスが表示されている、失敗したトランザクションを見つけます
- 「Fee」フィールドを確認して、請求された正確なSOLの量を確認します
取引前のチェックリスト:Solanaのトランザクション失敗を防ぐ方法
時間的制約のある取引の前にこのチェックリストを実行するのにかかる時間は60秒足らずで、失敗の最も一般的な原因を排除できます。
- 市場のボラティリティが高い時は、取引前に status.solana.com でアクティブなインシデントがないか確認してください
- 活発な取引時間中の取引では、優先手数料を少なくとも「Fast」に設定してください。時間的制約のある取引や NFT のミントには「Turbo」を使用してください
- スリッページ許容度がトークンペアのボラティリティと一致しているか確認してください:USDC/USDTなどの安定したペアは0.5%、中時価総額トークンは1%〜2%、ボラティリティの高い小時価総額トークンは最大3%
- SOLの残高が、取引額に手数料と賃貸料免除(rent-exempt)のしきい値のための0.05 SOLのバッファを加えた額をカバーしていることを確認してください
- 時間的制約のある取引や高額な取引の場合は、SolanaのパブリックRPCからHeliusやQuickNodeなどの専用プロバイダー(どちらも無料プランあり)に切り替えてください
- NFT ミントの場合:ミント期間が始まってからではなく、始まる前に優先手数料とRPCを設定してください
- 大規模な DEX スワップの場合:確定前に価格インパクトの割合を確認してください。価格インパクトが2%〜3%を超える場合は、スワップ額を減らすか、複数の小さな取引に分割してください
- 利用可能な場合は、DEX 内蔵の手数料オプティマイザーを信頼してください。Jupiter、Raydium、Orcaはそれぞれ、現在のネットワーク状況に合わせて調整される自動手数料推奨機能を提供しています
⚠️ 開発者向けノート
本番環境のdAppでは、静的な制限ではなく、シミュレーションに基づいたコンピュートユニットの推定を実装してください。
getRecentPrioritizationFees()を動的にポーリングし、トランザクション送信ごとに推奨手数料を更新します。アプリケーションが自動的にバックアップエンドポイントに切り替わるよう、RPCフェイルオーバーを実装してください。再試行時にブロックハッシュを再利用しないでください。
よくある質問:Solanaトランザクション失敗に対する5つの修正方法
以下の各回答は完結しています。FAQを利用するために本ガイドの残りの部分を読む必要はありません。
Solanaのトランザクションが失敗する原因は何ですか?
Solanaのトランザクションが失敗する原因は、ブロックハッシュの期限切れ、優先手数料の不足、コンピュートユニット予算の枯渇、スリッページ許容値の超過、またはRPCノードの過負荷の5つです。ネットワークレベルの失敗には、優先手数料を上げて再送信する必要があります。プログラムレベルの拒否には、スリッページ許容値やスワップ額などのトランザクションパラメータの調整が必要です。それぞれの詳細な説明については、5つの根本原因を参照してください。
はい。Solanaでは、トランザクションが失敗した場合でも、約0.000005 SOLの少額の基本料金がかかりますが、トークンやスワップ元本は差し引かれません。ネットワークに到達する前に過負荷のRPCノードによって静かにドロップされたトランザクションは、オンチェーンに記録が残らないため、手数料は一切かかりません。確認手順については、手数料は発生するかを参照してください。
Solanaのトランザクションは、約150スロット(通常のネットワーク状況で約60〜90秒)後に期限切れになります。混雑時には、バリデーターの処理が遅れるため、実効的な期限切れ時間が短く感じられることがあります。期限切れ後、トランザクションは完全に破棄され、最初から再送信する必要があります。
ブロックハッシュとは、すべてのSolanaトランザクションに組み込まれているタイムスタンプのようなコードで、そのトランザクションが最近作成されたものであることを証明します。バリデーターはこれを使用して、トランザクションが最新であり、以前のセッションからリプレイされていないことを確認します。ブロックハッシュは約150スロット後に期限切れになります。その後、トランザクションは Blockhash not found または Transaction expired エラーで拒否されます。
コンピュートユニットは、トランザクションが消費する処理リソースのSolana独自の測定単位です。単純な送金は少量を消費しますが、複雑なマルチホップ DEX スワップは大幅に多くを消費します。トランザクションが完了前にコンピュートユニットの予算を使い果たすと、Solanaはそれをキャンセルし、Compute budget exceeded エラーを返します。現代の DEX インターフェースは、ほとんどのユーザーに対してコンピュートユニットの制限を自動的に設定します。
優先手数料とは、混雑時に低手数料の申請よりも先にトランザクションを処理してもらうために、コンピュートユニットあたりのmicro-lamports単位でバリデーターに支払うオプションのチップです。Solanaの基本料金は固定で少額ですが、優先手数料はトランザクションの処理速度を決定する変動要素です。手数料レベルはネットワークの需要によって変わるため、現在の値についてはウォレットの自動推定機能やHelius Priority Fee APIを使用してください。
ウォレットの取引履歴からトランザクション署名をコピーし、Solana Explorer または Solana FM に貼り付けてください。失敗したトランザクションには、特定のコードとともに赤いエラーステータスが表示されます。承認されたトランザクションには緑色の成功ステータスが表示されます。二重送信を避けるため、再送信する前に必ず確認してください。
資金が送られることはなかったため、回収する必要はありません。失敗したSolanaトランザクションでは、ウォレットからトークンやスワップ額が差し引かれることはありません。トランザクションは実行前に失敗したため、少額の基本料金を除いてウォレットの残高は変わりません。お客様の元本は安全です。
Solanaは、従来のトランザクションキューの代わりに、Gulf Streamと呼ばれるトランザクション転送プロトコルを使用しています。Gulf Streamは、現在のブロックが終了する前に、トランザクションを次の予定バリデーターに直接転送します。すぐに処理できないトランザクションは、待機列に保持されるのではなくドロップされます。この設計によりSolanaの高いスループットが可能になりますが、失敗したトランザクションは受動的に待つのではなく、能動的に再送信する必要があることを意味します。
「Transaction simulation failed」とは、Phantomがトランザクションの事前テストを実行し、成功しないと予測したことを意味します。Phantomは、失敗するトランザクションに手数料を浪費させないよう、送信をブロックします。ほとんどのシミュレーション失敗は、スリッページの不足、SOL残高の不足、またはプログラムの拒否など、設定に実際の問題があることを示しています。稀に、古いステータスデータが誤った失敗を引き起こすことがあります。その場合は、ページを更新して一度再送信するのが適切です。
ウォレットにSOLを追加し、残高がトランザクション額に手数料と0.05 SOLのバッファを加えた額を超えていることを確認してください。Solanaの残高不足エラーは、必ずしも手数料分のSOLが足りないことを意味するわけではありません。初めてトークンを受け取る際に、新しいトークンアカウントを作成するために必要な「賃料免除(rent-exempt)」の閾値を満たすSOLが不足していることを意味する場合があります。
お客様の元本は安全です。送信またはスワップしようとしたトークンやSOLは、そのままウォレットに残ります。失敗したSolanaトランザクションは送金、スワップ、またはミントを実行しないため、残高は変わりません。通常0.001ドル未満の少額の基本料金のみが課金される場合があります。
トランザクションが繰り返し失敗する場合、通常は同じ誤った設定が調整されずに再送信されています。エラーを特定してください:Slippage tolerance exceeded であれば、スリッページ許容値を上げて再送信します。エラーメッセージなしで静かにドロップされる場合は、優先手数料が低すぎます。status.solana.com でアクティブなインシデントが表示されている場合は、ネットワークが回復するのを待ってから再送信してください。
NFT ミントの失敗は、短いローンチ期間中に数千のユーザーとボットが同時にトランザクションを送信し、パブリックRPCエンドポイントとバリデーターキューの両方を飽和させるために発生します。バリデーターは負荷を管理するために優先手数料の低いトランザクションをドロップします。ミント期間が始まる前に、優先手数料を「Turbo」に設定し、専用のRPCプロバイダーに切り替えることで、成功率が大幅に向上します。完全な準備手順については、Magic EdenとNFTミントの失敗を参照してください。
スリッページ許容値とは、スワップをリクエストしてから実行されるまでの間に許容できる最大価格変動のことです。トークンの価格がその閾値を超えて変動した場合、提示された価格よりも大幅に悪い価格で約定するのを防ぐために、スマートコントラクトが自動的にスワップをキャンセルします。一般的な設定は、安定したトークンペアで0.5%から、ボラティリティの高い資産で2%〜3%の範囲です。流動性の低いペアで3%〜5%以上に設定すると、MEVサンドイッチ攻撃のリスクが高まります。
Bybit で SOL を探索する
Solana価格ページ) で現在のSOL市場データを確認するか、現物取引が目的に合致する場合は SOL/USDT 現物市場) にアクセスしてください。Bybit での取引活動は、Solanaのオンチェーンでのトランザクション送信と同じではありません。SolanaネットワークでSOLを入金または出金する際には、ネットワーク手数料が適用される場合があります。
Solanaのすべてのトランザクション失敗は5つの根本原因のいずれかに該当し、それぞれに特定の修正方法があります。
| 根本原因 | 表示されるエラー | 解決策 |
|---|---|---|
| Blockhashの期限切れ | Blockhash not found / Transaction expired | 5秒待機し、新しいBlockhashを使用して最初から再送信してください |
| 優先手数料(Priority fee)が低すぎる | 混雑時にトランザクションが自動的にドロップされる | DEXまたはウォレットの設定で手数料を「Fast」または「Turbo」に設定し、再送信してください |
| スリッページの超過 | Slippage tolerance exceeded | DEXの設定でスリッページを0.5%〜1%増やしてから、再送信してください |
| コンピュートバジェット(Compute budget)の枯渇 | Compute budget exceeded / Program failed to complete | DEXに組み込まれているリトライボタンを使用してください。複雑なスワップの場合は、ダイレクトルートをお試しください |
| RPCノードの過負荷 | Unable to confirm transaction / サイレントドロップ | ウォレットのRPC設定をHeliusまたはQuickNodeに切り替えてから、再送信してください |
これらのどのシナリオにおいても、お客様の元本は安全です。Solanaのトランザクション失敗によってトークンが永久に失われることはありません。消費されるのは最小限の基本料金のみです。失敗の繰り返しを避けるため、時間に制約のあるスワップやミントを行う前に、トランザクション前のチェックリストを確認してください。
本ガイドで参照されている設定パスは公開日時点のものであり、ウォレットやDEXのバージョンによって異なる場合があります。手数料レベルはネットワークの需要に応じて変動します。現在の値については、ウォレットの自動見積もり機能またはHelius Priority Fee APIを使用してください。ツール(Helius、QuickNode、Solana Beach)の参照はオプションとして提示されており、推奨を意味するものではありません。