2026年10月時点で、ウォレットのエラーの大半は二つのグループに分かれます。トランザクションがブロックに含まれる前に出るエラー、たとえば「nonce too low」「replacement transaction underpriced」「insufficient funds for gas * price + value」やSolanaの「Transaction simulation failed: Blockhash not found」は、オンチェーンに何も記録されず、ネットワーク手数料もかかっていないことを意味します。ブロックに含まれた後の失敗、つまりEVMトランザクションがリバートした場合やガス切れになった場合、エラー付きで確定したSolanaトランザクション、TONのコンピュートフェーズの失敗では、実行された処理の分の手数料がかかります。下の表でエラー文字列を探せば、意味と対処法がわかります。
失敗したトランザクションに手数料はかかった?最初に確認する一つのルール
失敗したトランザクションにネットワーク手数料がかかるのは、失敗する前にブロックへ含まれていた場合だけです。
トランザクションが失敗するタイミングは二つあります。
- ブロックに含まれる前:ウォレットのシミュレーション、RPCノード、またはmempoolが拒否します。何もブロックに届かないため、ネットワーク手数料はかかりません。
- ブロックに含まれた後:トランザクションがブロックに入り、コードが実行されて失敗します。実行された処理の分の手数料がかかります。Etherscanは、失敗したトランザクションでも使用された計算の分だけガスが差し引かれると説明しており、Solanaの手数料に関するドキュメントも、トランザクションが失敗しても手数料は課金されるとしています。
どちらに当たるかを調べるには、トランザクションハッシュまたはシグネチャをブロックエクスプローラーで検索します。数分たっても記録がなければ、たいていはブロックに入っておらず、手数料もかかっていません。Pendingと表示されていれば、まだブロックに含まれていないということです。FailedまたはRevertedと表示された記録や、exit codeがゼロ以外の記録は、ブロックに入り、手数料がかかったことを意味します。
「nonce too low」「underpriced」「out of gas」はEVMでどんなエラー?
これらはgo-ethereumクライアントのソースにある文字列そのもので、大半はトランザクションがブロックに届く前に拒否されたことを意味します。
| エラー文字列 | 意味 | ネットワーク手数料は? | 対処法 |
|---|---|---|---|
| 「nonce too low」 | この番号のトランザクションがすでに確定済みで、ウォレットの状態が古い | かからない | ウォレットを再同期してエクスプローラーを確認し、意図した操作がまだ行われていない場合にだけ再送する |
| 「replacement transaction underpriced」 | スピードアップやキャンセルの手数料の上乗せが小さすぎた | かからない | 上乗せを増やす。Gethのデフォルトでは10%が必要 |
| 「max fee per gas less than block base fee」 | 指定した最大手数料が現在のベース手数料を下回っている | かからない | 最大手数料を引き上げる |
| 「insufficient funds for gas * price + value」 | ネイティブコインでは、送金額と最大ガスの合計を賄えない | かからない | ネイティブコインを補充する。トークンはあるのにガス用トークンがない場合を参照 |
| 「already known」 | 同じトランザクションがすでにmempoolにある | かからない | 待つ。害はない |
| 「out of gas」 | 実行がガスリミットを超え、変更は取り消された | かかる | ガスリミットを上げて再試行する |
「execution reverted」とは何を意味する?
「Execution reverted」は、スマートコントラクトが操作を拒否し、行った変更をすべて元に戻したことを意味します。現れるタイミングは二つあり、手数料の扱いが異なります。
ウォレットの送信前の見積もりの段階で出た場合は、何も送られておらず、手数料もかかっていません。トランザクションがブロックに入った場合、EtherscanにはFailまたはRevertedと表示され、Alchemyによれば送信者は使用したガスの分を支払います。コロンの後ろの文が実際の理由です。よくあるものは次のとおりです。
- 「UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT」:署名からブロックへの取り込みまでの間に、価格がスリッページの上限を超えて動いた。
- 「ERC20: insufficient allowance」:トークン承認の額が、使おうとしている額より小さい。関連する「ERC20: transfer amount exceeds balance」は、動かそうとした量より保有量が少ないことを意味します。
この二つのERC-20の文字列は、OpenZeppelin v4のコントラクトに由来します。新しいバージョンでは、別の名前のカスタムエラーが使われています。
ERC-4337のAAコードとEIP-7702のエラーは何を意味する?
スマートコントラクトアカウントは、通常のトランザクションの代わりにバンドラー経由でUserOperationを送ります。EIP-4337の仕様では、EntryPointのエラーメッセージはAA##の形式のコードで始まります。
| コード | 意味 | ネットワーク手数料は? |
|---|---|---|
| AA21 didn't pay prefund | ペイマスターが使われておらず、アカウントのEntryPointデポジットでは最大ガスを賄えない | かからない |
| AA23 reverted | アカウントの検証コードが操作を拒否した | かからない |
| AA33 reverted | ペイマスターの検証が操作を拒否した | かからない |
| AA95 out of gas | バンドルのガスリミットが、操作またはサブコールに対して低すぎた | 通常はかからない。handleOpsがリバートする |
EIP-4337の仕様では、シミュレーションがリバートした操作はバンドラーが破棄しなければならないとされているため、検証の失敗(AA2xとAA3x)では通常、オンチェーンに何も残りません。操作がブロックに含まれ、そのメインのコールがリバートした場合、ガスは、アカウントまたはそれをスポンサーしたペイマスターがオンチェーンで支払います。AlchemyはAA95について、通常はガスリミットの設定が低すぎることを示し、handleOpsがリバートするため、より高いガスリミット(バンドラーまたはSDKの設定)で再試行するよう述べています。
EIP-7702では、ノードから次のエラーが出ることがあります:「in-flight transaction limit reached for delegated accounts」(Gethのプールは、そのようなアカウントについて実行可能な保留中のトランザクションを一つしか受け付けないため、それが処理されるのを待ちます)。チェーンIDやnonceが誤っている認可は黙ってスキップされるため、委任が適用されないままトランザクションだけが成功することがあります。自分のアカウントを意図して委任した覚えがない場合は、委任を確認して取り消してください。予期しない委任はドレイナーの兆候です。
Solanaの「Blockhash not found」と「block height exceeded」は何を意味する?
「Block height exceeded」はblockhashの有効期限が切れたことを、「Blockhash not found」はノードがそのblockhashを認識しなかったこと(通常は期限切れで、ノードの遅延が原因のこともあります)を意味します。どちらの場合も、トランザクションは通常、処理されていません。Solanaの確認ガイドによると、blockhashは約151ブロック、およそ60〜90秒のあいだ有効で、期限切れのトランザクションはもう処理されません。
| エラー文字列 | 意味 | ネットワーク手数料は? | 対処法 |
|---|---|---|---|
| 「Transaction simulation failed: Blockhash not found」 | blockhashが古すぎるか、シミュレーションしたノードがまだそれを認識していなかった | かからない | 新しいblockhashで再試行する |
| 「block height exceeded」(TransactionExpiredBlockheightExceededError) | blockhashの期限が切れる前に確定しなかった | かからない。ただし期限直前に確定していた場合を除く。シグネチャを確認する | エクスプローラーでシグネチャを確認してから再試行する |
| 「Transaction simulation failed: Error processing Instruction N: custom program error: 0x...」 | プログラムが失敗を予測した(スワップのスリッページなど) | 送信前のシミュレーションで検出された場合はかからない。ウォレットやアプリがシミュレーションを省くと、Failedとして確定し、手数料がかかることがある | 理由を読み、スリッページや金額を調整する |
| 「Attempt to debit an account but found no record of a prior credit.」 | 支払いに使うアカウントにSOLがまったくない | かからない | SOLを入金する |
| 「Transaction results in an account (0) with insufficient funds for rent」 | 送ると、アカウントがレント免除の最低額を下回る | シミュレーションで検出された場合はかからない。シミュレーションが省かれるとFailedとして確定し、手数料がかかることがある | 送金額を少し減らす。Solanaのレントを参照 |
| エクスプローラーに「Failed」と表示 | ブロックに入り、プログラムがエラーを返した | かかる | エクスプローラーのログを読み、直して再送する |
Solanaの手数料は常にSOLで支払うため、「Insufficient funds for fee」や「insufficient funds for rent」はSOLが必要という意味です。トークン送金での単なる「insufficient funds」や「custom program error: 0x1」は、送ろうとした量よりそのトークンの保有量が少ないことを意味します。
Solanaでpriority feeは上げるべき?
priority feeを上げるのは、混雑時にトランザクションが期限切れを繰り返す場合だけで、シミュレーションのエラーが出たときではありません。
solana.comの手数料に関するドキュメントによると、Solanaの手数料は、署名1つあたり5,000 lamportsのベース手数料(50%がバーン、50%がバリデーターへ)と、任意のpriority feeの合計です。priority feeは、コンピュートユニット価格(マイクロlamports単位)にコンピュートユニットのリミットを掛けて1,000,000で割り、整数のlamportsに切り上げた額で、全額がバリデーターに入ります。priority feeを上げると、混雑時にリーダーがあなたのトランザクションをスケジュールしてくれる可能性が高まります。ただし、スリッページ、レント、SOL不足のエラーは解決せず、トランザクションが確定して失敗した場合でも課金されます。シミュレーションのエラーが出た場合は、原因を直してください。
TONのexit codeとバウンスされたメッセージは何を意味する?
TONのトランザクションはフェーズ(storage、credit、compute、action、bounce)に分かれて実行され、docs.ton.orgによればexit code 0と1は成功、それ以外は失敗を意味します。computeが失敗するとactionフェーズはスキップされ、バウンス可能な受信メッセージにはバウンスメッセージが作られます。手数料はフェーズごとに差し引かれるため、先行するフェーズの手数料は支払い済みのままです。手数料はGRAM(旧Toncoin。名称変更で何が変わったかを参照)で支払います。
| シグナル | 意味 | ネットワーク手数料は? | 対処法 |
|---|---|---|---|
| Exit code 13または-14 | computeフェーズでのガス切れ | かかる(使用したガスの分) | GRAMをより多く添付する |
| Exit code 9 | セルのアンダーフロー:コントラクトが、セルが保持するより多くのデータを読もうとした。ペイロードがコントラクトの想定と合っていないことが多い | かかる | ペイロードやコメントがそのコントラクトに合っているか確認する |
| Exit code 37 | actionフェーズ:送信メッセージのための「Not enough GRAMs」 | かかる | GRAMをより多く添付する |
| Compute phase skipped | メッセージに添えられたGRAMが少なすぎて、実行費用を賄えなかった | ガスはかからない。storageフェーズは実行される | GRAMをより多く添付して送る |
| バウンスされたメッセージ | 宛先が失敗したか、存在しない | かかる(手数料が差し引かれる) | メッセージ手数料とガス手数料を差し引いた価値が戻る |
WATS Walletはこれらのエラーとどう関わる?
WATS Wallet(Alltoscan LLC提供)は、EVMネットワーク・Solana・TON向けのノンカストディアルウォレット(Chrome拡張機能とiOS/Androidアプリ)で、鍵とシードフレーズはあなた自身が保持します。本ガイドのメッセージは、それらのチェーンが定義するネットワークレベルのエラーであり、WATS固有のコードではありません。
Solanaではネットワーク手数料をSOLで支払うため、Solanaの「insufficient funds」の行はそのまま当てはまります。少額のSOL残高を保っておけば避けられます。TONの行はプロトコルレベルのエラーを説明したもので、WATS WalletではTONの手数料はATSで支払われます。EVMネットワークでは、WATS WalletはERC-4337のペイマスターを通じて、BNB Chain上の一つのATS残高からネットワーク手数料をATSで課金します。ATS手数料の仕組みは別に説明しています。
よくある質問
暗号資産のトランザクションが失敗すると、お金は失われますか?
失敗したタイミングによります。ブロックに含まれる前に拒否された場合(「nonce too low」「replacement transaction underpriced」「Blockhash not found」のようなシミュレーション、ノード、mempoolのエラー)は、何も確定しておらず、ネットワーク手数料もかかりません。ブロックに入ってから失敗した場合(EVMのリバートやガス切れ、Solanaのエクスプローラーでの「Failed」、TONのゼロ以外のexit code)は、実行された処理の分の手数料がかかりますが、送ろうとした金額はアカウントに残り、TONのバウンスでは手数料を差し引いた価値が戻ります。ハッシュまたはシグネチャをエクスプローラーで確認すれば、どちらに当たるかがわかります。
保留中のトランザクションがないのに、ウォレットに「nonce too low」と出るのはなぜですか?
nonceはアカウントのトランザクションカウンターで、「nonce too low」は、その番号のトランザクションがすでに確定していることを意味します。よくある原因は、同じアカウントを別のウォレットアプリや端末から使った場合、「止まっている」ように見えたトランザクションが実は確定していた場合、ウォレットのキャッシュされた状態が古い場合です。意図した支払いや操作がすでに通っていないか、エクスプローラーで確認してください。通っていた場合は再送せず、通っていなければウォレットを再同期して再度送ります。拒否された試行そのものに手数料はかかっていません。本当に保留中のトランザクションがある場合は、<a href="/blog/speed-up-or-cancel-stuck-transaction">保留中のトランザクションをスピードアップまたはキャンセルする方法</a>を参照してください。
Solanaで「block height exceeded」や「Blockhash not found」が出た後、再試行しても安全ですか?
基本的に安全です。「Block height exceeded」はblockhashの期限が切れたこと(約151ブロック、およそ60〜90秒)を、「Blockhash not found」はノードがそれを認識しなかったこと(通常は期限切れ)を意味します。期限切れのトランザクションはもう処理されないため、後から確定して新しいトランザクションと二重になることはありません。それでも、まずSolanaのエクスプローラーでシグネチャを調べてから、新しいblockhashで再試行してください。期限切れの試行は、期限の直前に確定していた場合を除いて手数料はかかっておらず、それはエクスプローラーでの確認でわかります。混雑時に期限切れが続く場合は、priority feeを少し上げると助けになることがあります。

