トークン Approve(承認)は ERC20 トークンとスマートコントラクトがやり取りするための標準的な仕組みですが、2024〜2026 年で最大の DeFi 攻撃ベクトルでもあります。本記事では Approve の仕組みと撤回操作を詳しく解説します。先に結論を述べると、DeFi との取引のたびに Approve の残骸が生まれる可能性があり、長期間撤回しないと大きなリスクが積み重なります。毎月 Revoke.cash で監査し、不要な承認を撤回することは DeFi ユーザーに欠かせない習慣です。日常のメイン・サブ口座は バイナンス公式サイト の入口からメインアカウントを登録し、Android では バイナンス公式アプリ をインストール、iPhone ユーザーは海外 Apple ID への切り替えについて iOS インストールガイド を参考にしてください。

1. Approve の仕組みの原理

ERC20 トークンの二つの送金方式:

ERC20 トークン規格には二種類の送金方式が設計されています。

  1. transfer:ユーザーが自分で送金する(あなたが他人に USDC を送る)
  2. transferFrom:コントラクトが代理で送金する(スマートコントラクトがあなたの口座から USDC を引き出す)

transferFrom を使うには先に Approve が必要:

ステップ1:ユーザーが USDC コントラクトの approve(spender, amount) を呼び出す
        - spender = コントラクトアドレス
        - amount = 承認する数量

ステップ2:コントラクトが transferFrom(user, recipient, amount) を呼び出す
        - amount の範囲内でなければ成功しない

例えば Uniswap を使う場合:

ステップ1:ユーザーが Uniswap Router に USDC の引き出しを Approve する(一度に 1000 USDC を Approve)
ステップ2:ユーザーが Uniswap 上で USDC → ETH の交換を開始する
ステップ3:Uniswap Router が USDC.transferFrom を呼び出して USDC を引き出す
ステップ4:Uniswap Router がユーザーに対応する数量の ETH を送る

Approve は DeFi と ERC20 トークンをやり取りする際の基盤となる仕組みです。

Q:取引のたびに毎回 Approve し直す必要がありますか?

必要ありません。Approve は永続的です:

これがApprove の蓄積リスクの根本原因です:長期間撤回しない → 大量の過去の Approve が残り続ける。

2. Approve の二つの種類

限定承認(Limited Approval):

無制限承認(Unlimited Approval / MaxUint256):

なぜ無制限承認が存在するのか:

無制限承認のリスク:

実際の事例:

2024 年 12 月、あるユーザーが 2022 年に Uniswap 上で USDC を Unlimited で Approve していました。2024 年 12 月、そのユーザーのウォレットに 5 万 USDC が振り込まれ、2 時間後に悪意あるコントラクト(Uniswap V3 になりすました悪質な Router)が transferFrom を呼び出してすべて奪い去りました。事後調査により、フィッシングコントラクトが過去の Approve の抜け穴を悪用して攻撃を仕掛けたことが判明しました。

Q:限定承認と無制限承認、どちらを選ぶべきですか?

安全重視派(推奨):取引のたびに具体的な数量を手動で Approve する

利便性重視派:デフォルトで無制限承認

主流の戦略:

3. Approve 攻撃の主な形態

形態1:フィッシングサイトによる Approve 攻撃

フィッシングサイトの UI は本物そっくりで、ユーザーがウォレットを接続するとApprove トランザクションに署名させられます:

形態2:Permit 署名攻撃

EIP-2612 で導入された permit 関数は、署名(オンチェーンでない)による承認を可能にします:

Permit 攻撃の危険性:

形態3:過去の Approve を通じたプロトコルのハッキング

過去に Approve したプロトコルがハッキングされる:

形態4:悪質な Token Drainer

フィッシングサイトの署名画面で複数の Approve を一度に承認させる:

Q:Permit 署名は Approve より危険ですか?

はい、Permit の方がより危険です:

項目 Approve Permit
オンチェーン あり なし(署名のみ)
Gas 消費 あり なし
ウォレットの表示 比較的明確 分かりにくい
撤回方法 Revoke のオンチェーン取引 撤回不可(コントラクトの nonce を変更する必要あり)
ユーザーの警戒度 高い 低い

どんな Permit 署名も、対象トークン・数量・受取先をよく確認する必要があります。

4. Revoke による Approve の撤回を詳しく解説

主な撤回ツール:

Revoke.cash(最も主流、推奨):

Etherscan Token Approval:

Solscan Approval(Solana):

Revoke.cash の操作手順:

1. revoke.cash にアクセス
2. 「Connect Wallet」をクリック(MetaMask / Rabby を接続)
3. すべての承認が自動的に読み込まれる(トークン/プロトコル別に分類)
4. 一覧を確認:
   - トークン名(USDC、USDT、WETH など)
   - 承認先(コントラクトアドレス + 有名プロトコル名)
   - 承認数量(具体的な数値または Unlimited)
   - リスク評価(赤 = 高リスク、緑 = 既知のプロトコル)
5. 「Revoke」をクリックして疑わしい承認を撤回
6. MetaMask のポップアップで署名 + Gas を支払う
7. オンチェーン反映を待つ(5〜30 秒)

Revoke の Gas コスト:

チェーン 1件あたりの撤回 Gas
イーサリアムメインネット 5〜30 ドル
Polygon 0.01 ドル未満
Arbitrum / Optimism / Base 0.1〜1 ドル
BNB Chain 0.05〜0.30 ドル
Solana 0.01 ドル未満

Q:Approve を撤回するには Gas が必要ですか?

はい。Revoke はオンチェーン取引なので、Gas の支払いが必要です。ただし:

最適化のアドバイス:

5. Approve の定期監査の標準フロー

監査頻度:

ユーザータイプ 監査頻度
アクティブな DeFi ユーザー(週5回以上やり取り) 毎月
中程度の DeFi ユーザー(月5〜20回やり取り) 3か月ごと
低頻度の DeFi ユーザー(月5回未満やり取り) 6か月ごと

監査手順:

ステップ1:ウォレットを Revoke.cash に接続する

ステップ2:承認をリスク別に分類する

リスクレベル順に並べる:

ステップ3:不要な承認を撤回する

撤回の原則:

ステップ4:必要な承認の記録を残す

残す承認の記録項目:

ステップ5:毎回の監査後に確認する

Q:撤回する前に、あるプロトコルが「既知」かどうかをどう判断すればいいですか?

判断方法:

  1. プロトコル名:Revoke.cash に表示されるプロトコル名(例:「Uniswap V3 Router」)
  2. コントラクトアドレス:Etherscan で検索し、コントラクトが検証済みか、主流プロトコルかを確認する
  3. DefiLlama のプロトコルページ:TVL と運営期間を確認する
  4. 公式ドキュメント:プロジェクト側が公表しているコントラクトアドレス

識別できないコントラクト + Unlimited 承認 = 高リスク、すぐに撤回してください。

6. チェーンごとの Approve 管理

イーサリアムメインネット + EVM 互換チェーン:

Solana チェーン:

ビットコインチェーン:

Move 系(Sui/Aptos):

Q:Solana に Approve のリスクはありますか?

あります。Solana の「署名承認」も類似のリスクがあります:

主な Solana のフィッシング:

防御の原則はイーサリアムと同じです。

7. Approve 最適化のベストプラクティス

1. 毎回 Approve は具体的な数量で行う

MetaMask の Approve 表示を設定する:

2. メイン・サブウォレットの分離

3. 古いプロトコルの承認を撤回する

毎月の監査:

4. 「まとめ署名」に警戒する

5. 署名解析ツールを使う

Q:すべての Approve を一括で撤回できますか?

「一括で全て撤回」という機能はありません:

一部のツールはバッチ「キュー」機能を提供:

8. 特殊なケース:NFT の Approve

NFT にも Approve の仕組みがあります:

NFT Approve のリスク:

実際の事例:

2024 年 5 月、あるユーザーが OpenSea を装った偽サイトで setApprovalForAll に署名し、悪意あるコントラクトに自分の BAYC NFT を管理する権限を与えてしまいました。その後 BAYC は即座に攻撃者のアドレスへ移され、損失は約 12 万ドルに上りました。

NFT Approve の撤回:

Q:OpenSea/Blur で NFT を売るには承認が必須ですか?

はい。主要な NFT マーケットプレイスでは出品に承認が必須です:

安全な方法:

9. よくある FAQ

Q:Approve 一回あたり最低どれくらいの Gas がかかりますか?

イーサリアムメインネットの標準的な Approve Gas:

L2/Polygon/BSC 上の Approve は通常 1 ドル未満です。

Q:撤回した Approve は再び有効にできますか?

直接有効にすることはできません。撤回後は「一度も承認していない」状態と同じになり、再度 Approve する必要があります:

Q:すべての ERC20 トークンに Approve が必要ですか?

はい。すべての ERC20 規格トークンは Approve の仕組みに従います:

例外:

Q:Approve するとトークンはロックされますか?

されません。Approve はトークンをロックしません:

Approve は「クレジットカードの限度額」に似ています:お店に信用枠を与えるだけで、お金は自分の銀行口座に残っています。

Q:Permit 署名はどうやって撤回しますか?

Permit 署名は直接「撤回」できませんが、間接的な方法があります:

Permit の安全性の鍵は予防にあります:Permit の署名をする前に毎回よく確認してください。

Q:USDT と USDC の Approve のリスクは同じですか?

全体的には似ていますが、細部の違いがあります:

Q:あるウォレットの過去すべての Approve 履歴を確認できますか?

できます:

Q:Approve を撤回するとすぐに反映されますか?

はい。Revoke がオンチェーンで確定するとすぐに反映されます:

Q:複数のウォレットの承認を一括で Revoke できますか?

できません。各ウォレットは独立しています:

複数ウォレットを持つユーザー:毎月各ウォレットを個別に監査してください。

データソース

リスク注意:本記事は独立した第三者による整理であり、投資助言を構成するものではありません。Approve は DeFi における主要な攻撃ベクトルであり、定期的な監査と撤回は基本的なセキュリティ実践です。すべてのデータは 2026 年4月時点のものです。