マックビー(@Houshi)です。
急激なガス代の高騰のためにETHの送金が詰まってしまった。仮想通貨ゲームのプレイ中にトランザクションが通らなくなってしまったという経験はありませんか?
実はイーサリアムでPending(保留中)のトランザクションはキャンセルすることができます。今回の記事ではそのキャンセル方法をご紹介します。
こちらの記事ではマイイーサウォレット(MEW)を使った方法をご紹介していますが、メタマスクをご利用の方は以下の記事をどうぞ。
トランザクションをキャンセルせずにそのまま通したいという方は以下の方法でガス代を変更することもできます。
PCではなくモバイルウォレットでキャンセル処理をしたいという方はこちらの記事。
目次
送金詰まり時にキャンセルした方が良い理由
トランザクションがいつまでpendingの状態が続くのかは分かりません。
例え数日掛かったとしても、急ぎの用でなければそのまま放置しておけば良いのかもしれません。
しかしイーサリアムではウォレットアドレス毎にnonceという通し番号が各トランザクションに割り当てられており、古いnonceのトランザクションが実行されるまでは新しいnonceのトランザクションが実行されないのです。
これはどういうことかと言うと、あなたが初めてイーサリアムを送金した場合そのトランザクションにはnonce:0という数字が割り当てられます。
トランザクションを繰り返していけば、nonce:1、nonce:2とどんどん数字は増えていきます。
そしてnonce:3で十分なGasを設定しなかったためにpending状態が続いている時に、nonce:4で十分な量のGasを設定し送金をしたとしても、nonce:3のトランザクションが実行されるまではnonce:4もpending状態となってしまうのです。
ICOやプレセールなどで急ぎの送金が必要となるなら、pending状態のトランザクションはキャンセルしてしまった方が良いかもしれません。
またメタマスクはまれにトランザクションの履歴が消えてしまうというバグが発生します。こうなると前述の「メタマスクで保留中のトランザクションのガス代を上げる操作」ができなくなってしまうので、こういった場合もこのキャンセル操作が有効です。
トランザクションのキャンセル手順
トランザクションのキャンセルにはMEW(MyEtherWallet)を使います。
こちらがMEWの公式ヘルプですが、こちらに書かれている通りこのキャンセル方法が毎回必ず上手く行くという保証はありません。
Checking or Replacing a TX After it’s Been Sent
理論的には間違って送金したトランザクションもPending中ならキャンセルできるはずですが、あくまでトランザクション詰まり時の緊急手段と考え使用は自己責任でお願いします。
では実際のキャンセル手順を説明していきます。
キャンセル処理にはMEW(マイイーサーウォレット)を使用するので、MEWで自分ウォレットにログインをしてください。
キャンセルしたいトランザクションのハッシュを確認する
まずは各トランザクションに割り当てられているトランザクションハッシュ(TxHash)という固有の文字列を特定します。
(※Metamaskを使っている方はこの手順を飛ばして、Metamaskの画面上から該当トランザクションをクリックするだけでハッシュが表示されます)
MEWでウォレットをアンロックすると画面右側に表示される「ETH(https://etherscan.io)をクリックします。
そのウォレットアドレスで今までに行ったトランザクションの履歴が全て表示されます。
新しいトランザクションほど上の方に表示されるので、To(送金先アドレス)、Value(送金額)などから該当のトランザクションを特定してください。
「Block」の項目が(pending)になっていればそのトランザクションはまだ保留中、数字列が入っていれば完了(成功 or 失敗)しています。
該当のトランザクションの「TxHash」をクリックします。
トランザクションの詳細が表示されるのでTxHashをコピーします。
前述した通りETHでは古いnonceのトランザクションが実行されるまで新しいnonceのトランザクションは処理されません。
もし「Estimated Confirmation Duration」の下に以下ののように表示されていたら、そのトランザクション自体が送金詰まりしているのではなくもっと古いトランザクションがpendingになっているのが原因なので、より古いトランザクションをチェックしてみてください。
There is a Pending Txn with a lower account nonce. This Txn can only be executed after confirmation of the earlier TxHash
トランザクションの状態をMEWで確認する
MEWにはトランザクションのステータスをチェックする機能があります。
Check TX Statusにアクセスし、テキストボックスに先ほどコピーしたトランザクションハッシュを貼り付け、「処理状況を確認」をクリックします。
画面を下にスクロールすると、検索結果が表示されます。
「待機中の処理が見つかりました。」と表示されればOKです。
もし緑色の文字で「処理が見つかりました」と表示された場合は、そのトランザクションは既に処理されブロックチェーンに載っているのでキャンセルすることはできません。
もし赤字で「対象の処理が見つかりません」と表示された場合は15秒ほど待って再度「処理状況を確認」をクリックしてください。
クリック毎に別のNodeを見に行くので、今度はトランザクションが見つかるかもしれません。
それでも見つからない場合は画面右上のドロップダウンリストからETH (Etherscan.io)、 ETH (Infura.io)、ETH (MyEtherWallet)等を選んで再度「処理状況を確認」をクリックしてみてください。
実際のキャンセル処理
待機中のトランザクションが見つかったら実際のキャンセル処理を行います。
より正確に言うと「キャンセル処理」ではなく「トランザクションの上書き」になります。
「生成して詰まっているトランザクション」を「自分のアドレス宛に0ETHを送るトランザクション」で上書きすることでキャンセルするのです。
画面を下にスクロールし、お好きな方法でウォレットをアンロックしてください。
更に下にスクロールすると自分のアドレス宛に0ETHを送る設定が表示されます。
現状デフォルトで設定されるGasは、ガスリミット:21000、ガス価格(Wei):41000000000となので0.000861ETHです。
ETH Gas Stationを参考にして必要に応じてガス価格をを変更してください。
ちなみにETH Gas Stationで表示されるガス価格はGwei、MEWで表示されるガス価格はWeiなので、MEWではお尻に0を9個加えた価格を入力しましょう。
Nonceがキャンセルしたいトランザクションの数字になっていることを確認し、「トランザクションを生成」をクリックします。
これで対象のトランザクションを上書きする = キャンセルすることができます。
下にスクロールして「トランザクションの送出」をクリック。
「はい、確かです。処理を実行します。」をクリック。
画面下部に緑色のバーが表示されるので、「Check Tx Status」をクリック。
「処理が見つかりました」と表示されればキャンセル処理は完了です。
もし見つからなければ20秒ほど待って再度「処理状況を確認」をクリックしてみてください。
送金詰まりしていたNonceのトランザクションがキャンセルされれば、それが原因でpendingとなっていたそれ以降のNonceのトランザクションの処理が始まるはずです。
まとめ
以上! ポイントをまとめてみます!
- ETHは1つ送金詰まりを起こすとそれ以降のトランザクションも全てpendingになる
- キャンセルできるのはpending中のトランザクションのみ
- 正確にはキャンセルではなく、トランザクションの上書き
- 掛かるコストは自分宛に0ETHを送るためのGas料金のみ
RedditにはキャンセルしたトランザクションのETHが返ってこないという書き込みもありましたが、自分のウォレットから送金したトランザクションだったら、そもそもPending中はまだETHが送られていないので、DEXかどこかで生成したトランザクションだとそういった可能性があるのではないかと推測します。
そんな感じで!