Tx Doctor / EVM リバート事典
EVM トランザクションはなぜリバートした?
リバートの理由は数種類しかありません。コントラクト自身のチェックに引っかかった、ガスが尽きた、ERC-20 の承認や残高が足りない、スリッページ上限を超えた、nonce が既に使われた。各項目で見分け方と、実際に効く対処を説明します。
自分のトランザクションを診断対応チェーン
チェーンはハッシュそのものから判定するため、ネットワークの選択ミスは起きません。未対応のチェーンは推測せず明示します。
実行が revert(理由文字列なし)
EVM · reverted — コントラクトが呼び出しを拒否し、メッセージも返しませんでした。理由なしの require()、デコーダが知らない custom…
ガス不足
EVM · gas — 呼び出しが終わる前にガス上限を使い切り、EVM がすべて巻き戻しました。ただしガス自体は課金されます。
基本ガスが低すぎる
EVM · gas — 指定したガス上限が取引自体の固定コスト(21,000 に calldata 分を加えたもの)より小さく、実行前に拒否されました。
ガスを払う残高が不足
EVM · balance — 送信アドレスが「送金額 + 設定した価格のガス代」を賄えないため、ノードが取引を受け付けませんでした。
Nonce が低すぎる
EVM · nonce — この nonce の取引はすでに取り込まれているため、ノードは新しい取引を重複として破棄します。
置換取引の手数料が低すぎる
EVM · nonce — 保留中の取引を置き換えようとしましたが、新しい手数料が競り勝てる水準ではありませんでした。多くのノードは約 10% 以上の上乗せを要求します。
ERC-20 送金が残高を超過
EVM · token — 送信アドレスの保有量が要求額より少ないため、トークンコントラクトが送金を拒否しました。転送手数料付きトークンが先に取り分を引く場合も同様です。
ERC-20 の承認額が不足
EVM · token — ルーターやコントラクトがその数量を引き落とす権限を持っていないため、transferFrom が revert しました。
セーフトランスファー失敗(STF / TF / TransferHelper)
EVM · router — ルーターがウォレットからトークンを引き出せませんでした。Uniswap 系は STF(safeTransferFrom 失敗)や TF、PancakeSwap は…
スワップでスリッページ超過
EVM · DEX — プールの出力が最小受取額を下回った(または最大入力額を超えて引かれた)ため、ルーターは不利な価格で約定せず revert しました。
スワップの期限切れ
EVM · DEX — 設定した期限を過ぎてから取引が取り込まれたため、ルーターが実行を拒否しました。
コントラクトが停止・凍結・ブラックリスト
EVM · token — トークンまたはプロトコルが意図的に送金を止めています。手数料の調整や再試行では解決しません。制限はコントラクト所有者が設定しています。
Solidity panic(算术・境界エラー)
EVM · Panic — コントラクトがコンパイラ挿入の panic に当たりました。オーバーフロー、ゼロ除算、配列の範囲外読み取り、assert()…
未知の custom error selector
EVM · custom — revert データが ERC-20 / Panic 標準ではない 4 バイト selector で始まっています。custom error…