Ethereumや他のEVMチェーンでトークン承認を取り消す方法
Ethereumや他のEVMチェーンで承認を取り消す手順、危険な承認の見分け方、取り消しにかかるコスト、取り消しでは元に戻せないことを解説します。
Ethereumや他のEVMチェーンでトークン承認を取り消すには、信頼できる承認チェッカー(Revoke.cashやブロックエクスプローラーのトークン承認ツールなど)にウォレットを接続し、ネットワークを選び、どのコントラクトがあなたのトークンを使えるかを確認して、もう使っていないものや心当たりのないものについて取り消しトランザクションを送信します。取り消しはそれぞれ上限額をゼロに設定するオンチェーントランザクションで、少額のガス代がかかります。
承認は、セルフカストディで最も見落とされがちなリスクの一つです。分散型取引所で取引したりDeFiアプリを使ったりするたびに、おそらくあなたはコントラクトにトークンを動かす権限を与えています。その権限は無期限に有効なままです。そのコントラクトが後に悪用されたり、悪意あるコントラクトを承認してしまったりした場合、あなたが追加で署名しなくてもトークンを奪われる可能性があります。
トークン承認の仕組み
Ethereum上のほとんどのトークンの規格であるERC-20トークンには、approve関数があります。コントラクトを承認すると、上限額(allowance)を設定することになります。これは、そのコントラクトがあなたのアドレスから送金できるそのトークンの最大量です。
多くのアプリは、取引のたびに承認し直さなくて済むよう無制限の上限額を求めます。便利ではありますが、そのコントラクトは今でも将来でも、いつでもそのトークンの残高をすべて動かせるということです。
NFTも同様です。setApprovalForAll関数は、あなたが保有するコレクション内のすべてのNFTを動かす権限をオペレーターに与えます。NFTドレイナーがこれを狙うのはそのためです。
さらに新しい仕組みとしてpermit署名があります。一部のトークンやシステム(UniswapのPermit2を含む)では、トランザクションを送る代わりにオフチェーンのメッセージに署名することで上限額を付与できます。こうした署名は無害に見えますが、送金を許可してしまうことがあります。このリスクについてはアイスフィッシングとpermit署名の記事で解説しています。
ステップ・バイ・ステップ:承認を取り消す方法
- 1信頼できるツールを直接開く。 アドレスを自分で入力するか、ブックマークを使いましょう。よく知られた選択肢には、Revoke.cashや、Etherscanなどのエクスプローラーにあるトークン承認チェッカーがあります。偽の「revoke」サイトも存在するため、DMや広告のリンクは絶対にたどらないでください。
- 2ウォレットを接続するか、アドレスを貼り付ける。 アドレスを貼り付ければ、接続せずに承認を確認できます。接続が必要なのは、取り消しトランザクションを送信するときだけです。
- 3ネットワークを選ぶ。 承認はチェーンごとに存在します。まずEthereumを確認し、その後Arbitrum、Optimism、Base、Polygon、BNB Smart Chainなど、利用しているネットワークをそれぞれ確認しましょう。
- 4一覧を確認する。 各承認について、トークン、支出権限を持つコントラクト、上限額、そして多くの場合は付与された時期が表示されます。
- 5取り消すものを見極める。 無制限の上限額、心当たりのない支出先、もう使っていないアプリ、既知の攻撃に関わったコントラクトを優先しましょう。
- 6取り消しをクリックし、ウォレットで確認する。 ウォレットの表示を読みましょう。上限額をゼロに設定する
approve呼び出し(NFTの場合はfalseに設定するsetApprovalForAll呼び出し)になっているはずです。 - 7ネットワークごとに繰り返す。 その後、画面を更新して承認が消えたことを確認します。
優先して取り消すべき承認
| 承認の種類 | リスクレベル | 対応 |
|---|---|---|
| 不明なコントラクトへの無制限の上限額 | 高 | すぐに取り消す |
価値あるNFTコレクションへのsetApprovalForAll | 高 | 出品中でなければ取り消す |
| もう使っていないアプリへの無制限の上限額 | 中 | 取り消す |
| よく使う信頼できるアプリへの制限付き上限額 | 低 | 維持するか減額する |
| 攻撃に関わったコントラクトへの承認 | 高 | すぐに取り消す |
取り消しでできないこと
取り消しは予防策であり、治療ではありません。次のことはできません。
- すでに送金されたトークンを取り戻すこと。
- シードフレーズや秘密鍵が盗まれた場合にあなたを守ること。その場合、攻撃者は何にでも署名できます。ウォレットが侵害されたときにすぐやるべきことで説明しているとおり、残りの資産を新しいウォレットに移しましょう。
- すでに与えたオフチェーンのpermit署名を確実に無効にすること。これらには独自の有効期限とnonceのルールがあるため、怪しいpermitに署名した場合は、影響を受けるトークンを新しいウォレットに移すのが最も安全な対応です。
今後の承認リスクを減らす
- 上限額をカスタム設定する。 多くのウォレットでは、承認画面で金額を編集できます。使う予定の分だけを承認しましょう。
- 試用には別のウォレットを使う。 新しいアプリ、ミント、エアドロップには使い捨てウォレットを用意し、長期保有の資金は見慣れないサイトに一切接続しないウォレットに保管しましょう。
- すべての署名リクエストを読む。 理解できないメッセージへの署名を求められたら、手を止めましょう。
- 承認を定期的に見直す。 数か月ごと、そして新しいアプリを試した後に見直しましょう。
- 接続済みサイトも確認する。 接続と承認は別物です。ウォレットの権限と接続済みサイトをご覧ください。
よくある間違い
- 検索広告やSNSの返信で見つけた偽の取り消しツールを使う。
- Ethereumでは取り消したのに、レイヤー2ネットワーク上の同じウォレットを忘れる。
- ウォレットでサイトの接続を解除すれば承認も消えると思い込む。消えません。
- 少額のトークンを放置する。攻撃者は奪えるものは何でも根こそぎ持ち去ることが多いのです。
まとめ
トークン承認は、付与した瞬間を過ぎても残り続ける常設の権限です。確認は無料、取り消しは安価で、定期的に行えばドレイナーが使う最も一般的な経路の一つを塞げます。習慣にして、必要な分だけを承認し、主要な資産はめったに署名しないウォレットに保管しましょう。
よくある質問
トークン承認とは何ですか?
トークン承認とは、スマートコントラクトに対して、特定のトークンを設定した上限額まであなたのウォレットから移動することを許可する権限です。分散型取引所やその他のDeFiアプリが機能するには承認が必要です。この権限は、あなたが取り消すか上限額が使い切られるまで、たとえそのアプリを二度と利用しなくても有効なままです。
承認の取り消しにガス代はかかりますか?
はい。取り消しは上限額をゼロに設定するオンチェーントランザクションなので、通常のネットワーク手数料を支払います。Ethereumメインネットでは目立つ額になることもありますが、レイヤー2ネットワークでは通常安価です。承認の確認は無料です。
承認を取り消せば盗まれたトークンは戻りますか?
いいえ。取り消しは、そのコントラクトによる今後の送金を防ぐだけです。すでに奪われたトークンは、取り消しによって取り戻すことはできません。シードフレーズや秘密鍵が漏洩した場合は、取り消しだけでは不十分です。残りの資金を新しいウォレットに移しましょう。
トークン承認はどのくらいの頻度で確認すべきですか?
数か月ごと、そして新しいアプリや見慣れないアプリを利用した後には毎回見直すのがよい習慣です。悪意あるものに署名した疑いがある場合も、すぐに確認しましょう。
