Owlio
JA
← ブログ
ハウツー初級

Ethereum取引が失敗してもガス代がかかる理由

操作が失敗すると、トークンは変わらなくてもETHが減ることがあります。再試行に払う前に取引記録を確認しましょう。

Ethereumの取引は失敗してもETHがかかることがあります。予定した操作が巻き戻されても、実行には有料の計算処理が必要だからです。 取引がブロックに含まれ、最上位のステータスがFailedの場合、その取引による送金やコントラクトの変更は反映されません。それでも実行手数料は請求されます。

このガイドは、自分でガス代を払うアカウントからの通常のEthereum Mainnet取引を対象とします。スマートアカウント、スポンサー付き取引、取引所からの出金、複数チェーンにまたがる送金には、追加の手順や費用がある場合があります。アプリ内の一段階が失敗しただけでは、オンチェーン取引全体の失敗は確定しません。

まず何が失敗したのかを確かめる

ウォレットの履歴から取引を開き、Ethereum Mainnetのエクスプローラーで確認します。完全な取引ハッシュ、送信者、ブロック番号、全体のステータスを記録してください。これらの公開情報は何も署名せずに確認できます。

区別が重要なのは、Ethereumのレシートが最上位の実行結果を記録するためです。ステータス0は失敗、1は成功を意味します。トレースにある内部呼び出しの失敗が、必ずしも取引全体の失敗を意味するわけではありません。全体のステータスがSuccessなら、すべてが巻き戻されたと決めつけず、操作の実際の結果を調べてください。

ブロック番号がなく、取引がまだ保留中なら、保留中の取引チェックリストを使ってください。以下の確認はブロックへの取り込み後が対象です。すでに失敗した取引の手数料を上げても、記録された結果は変わりません。

手数料と送金予定額を分けて読む

失敗した取引のページで、エクスプローラーが表示している場合はTransaction Fee、Gas Used、実効のGas Priceを探してください。送金予定額は別に扱います。Value欄は実行に提出した値を示すことがあり、その金額が受取人に届いた証拠にはなりません。

通常のMainnet取引では、請求された実行手数料はガス使用量と実効ガス単価の積です。最大手数料の設定とガス上限は境界値なので、その2つを掛けても実際の支払額はわかりません。Ethereumのガスに関する文書はこれらの違いを説明しています。

以下は説明用の計算例であり、実際の取引でも現在の手数料見積もりでもありません。

項目 例の値
予定したトークン送金 100トークン
レシート全体のステータス Failed
ガス使用量 60,000単位
実効ガス価格 1単位あたり5 gwei
実行手数料 300,000 gwei、つまり0.0003 ETH

ほかの動きがなければ、失敗した送金で送信者のトークン残高は変わらず、ETH残高は手数料分減ります。この例は、適切なガス上限を指定したり、次の取引の価格を示したりするものではありません。

ETHの減少が記録された手数料より大きいなら、同じアカウントのほかの取引を調べてください。ドル建てポートフォリオのグラフから請求額を逆算しないでください。同時に市場価格が変動する場合があります。画面間で数量がまだ合わないなら、ポートフォリオ残高のチェックリストに進んでください。

ガス不足とコントラクトのリバートを区別する

Etherscanの失敗ガイドは、実行中のガス不足とコントラクトによるリバートを区別しています。どちらも取引の失敗につながりますが、調べ方は異なります。

実行中のガス不足: 計算処理が利用可能なガスを使い切った状態です。試みた変更は巻き戻され、与えられたガスは消費されます。使用量と上限を比較し、エクスプローラーのエラーを読んでください。正当な操作で、まだ実行したいなら、ウォレットやプロトコルの最新の見積もり手順を参照してください。関係のない送金から古い上限をコピーしないでください。

実行のリバート: コントラクトが実行を止め、自身の変更を取り消した状態です。満たされなかった条件を説明するエラーを返すことがあります。REVERTの仕様は未使用ガスが残ることを認めているため、失敗したレシートでもガス上限の100%を消費するとは限りません。

正確なエラーを保存し、使う予定だったプロトコルの文書で調べてください。エクスプローラーが解読できず、一般的なリバートメッセージでは原因がわからない場合もあります。その場合、原因は未解決のままです。ガスの枠を増やしても、コントラクトの条件が変わった証拠にはなりません。

ガスの価格と上限は別の設定です。単位あたりの支払いを増やしても、コントラクトが拒否する操作を受け入れさせることはできません。意味のわからない警告を消すためだけに、取引の保護を緩めたり上限を増やしたりしないでください。

再試行する前に、それ以前の成功した手順を確認する

アプリの操作には複数の取引が含まれることがあります。例えば、ある取引で承認が成功し、後の別の取引でスワップが失敗する場合があります。後の失敗は前の取引を取り消しません。各ハッシュとそのステータスを個別に確認してください。

次の試行を承認する前に、短い記録を作ります。

  1. 失敗した操作: ハッシュ、ブロック、全体のステータス、正確なエラー。
  2. 費用: 取引手数料、ガス使用量、実効ガス価格。
  3. ほかの手順: 別々の承認、入金、再試行のハッシュと結果。
  4. 現在の状態: Mainnet上のこのアカウントのトークン数量と、関連するプロトコルのポジション。
  5. 再試行する理由: 特定した原因と、それに対処するため何が変わったか。

最後の項目を埋められなければ、再試行しても原因は未解決です。新しい取引がブロックに含まれれば、追加の手数料がかかる場合があります。公開の取引情報を使ってプロトコルの公式サポートに相談し、シードフレーズと秘密鍵は公開しないでください。

操作が失敗しても返金可能なガス残高は生まれない

MetaMaskはネットワークのガス代を徴収しておらず、返金できないと説明しています。未使用のガス枠は、実行ですでに消費された手数料とは別です。その未使用枠を請求するために返金サイトへ接続する必要はありません。

ポートフォリオトラッカーは保有資産の比較に役立ちますが、合計額からコントラクトのエラーを説明したり、取引を取り消したりはできません。失敗したレシートと手数料を今回の試行の記録として残してください。先へ進む前に、どの操作が失敗し、いくらかかり、新しい試行でどの条件を変えるのかを把握しておく必要があります。

よくある質問

Ethereumの取引が失敗すると、送ろうとしたトークンを失いますか?

Ethereum Mainnetの通常の取引で、レシートの最上位ステータスが失敗を示す場合、予定した送金とコントラクトの状態変更は巻き戻されます。送信者は実行手数料を支払います。残高がこの結果と合わない場合は、別の取引と正確なトークンコントラクトを確認してください。

失敗した取引は必ずガス上限の全量を使いますか?

いいえ。コントラクトは利用可能なガスを使い切る前に意図的にリバートできます。実行中にガスが尽きた場合は、与えられたガスが消費されます。上限だけから結果を推測せず、レシートのガス使用量と失敗理由を読んでください。

ガス価格を上げればリバートした取引を直せますか?

ガス1単位あたりの価格を上げても、コントラクトの条件は変わりません。まずエラーを特定してください。ガス上限とガス価格は別の設定であり、新しい試行も失敗して追加の手数料が発生することがあります。