ConsenSysが構築した、Web3への入口となる主要なセルフカストディ型暗号資産ウォレット。
すべての記事を読むすべてのDeFiインタラクションはトークン承認から始まり、すべてのトークン承認はそれを作成したトランザクションよりも長く続く可能性のある権限です。

トークン承認とは、分散型アプリ(dappとも呼ばれる)がウォレットから特定の種類のトークンにアクセスし、移動することを許可するスマートコントラクトの権限です。承認がなければ、ウォレットがアプリのインターフェースに接続されていても、セルフカストディアルウォレット内のトークンにアプリがアクセスすることはできません。承認とは、ウォレットの接続とプロトコルが実際に資産を使用できるようにすることの間のギャップを埋めるものです。
トークン承認は、分散型取引所でのトークンスワップ、レンディングプロトコルへの預け入れ、プールへの流動性追加、マーケットプレイスでのNFTの出品など、ほぼすべてのDeFiインタラクションに必要です。また、暗号資産セキュリティにおいて最も悪用されるメカニズムの一つでもあります。MetaMaskの月次暗号資産セキュリティレポートでは、これらの脅威を詳しく追跡しています。たとえば、2026年2月の暗号資産セキュリティレポートでは、「シグネチャーフィッシング」(承認フィッシングとも呼ばれる)の悪用が207%増加したことが取り上げられています。トークン承認の機能、その持続性、そして攻撃者がどのように悪用できるかを理解することは、セルフカストディアルウォレットを使用するすべての人にとって不可欠です。
免責事項:このコンテンツは教育目的のみを目的としています。財務アドバイス、勧誘、または英国のユーザーを対象としたものではありません。暗号資産ウォレットおよびデジタル資産にはリスクが伴い、すべてのユーザーに適しているわけではありません。
トークン承認の一般的な例として、分散型取引所でのUSDCからETHへのスワップがあります。アプリのスマートコントラクトは、ウォレットからUSDCを取得してトレードを実行するための権限が必要です。その権限がトークン承認です。
コントラクトレベルでは、ユーザーはUSDCトークンコントラクト上のapprove()という関数を呼び出します。この関数は2つの入力を受け取ります:スペンダー(承認されるスマートコントラクトアドレス)と金額(スペンダーが移動できるトークンの数量)です。承認トランザクションがブロックチェーン上で確認されると、スペンダーコントラクトはtransferFrom()を呼び出して、ユーザーのウォレットから承認された金額までのトークンを、ユーザーからの追加確認なしに移動できるようになります。
トークン承認について、特に初心者が知っておくべき重要な点が2つあります。第一に、承認は1つのトークンと1つのスペンダーに固有のものです。分散型取引所(DEX)にUSDCの使用を承認しても、ETH、BTC、その他のトークンへのアクセスは付与されません。第二に、承認はネットワーク手数料がかかるブロックチェーントランザクションです。これは実際のスワップとは別のステップであるため、DeFiインタラクションでは2回の確認が必要になることが多いです:1回は承認のため、もう1回は実行のためです。
承認の金額フィールドは、スペンダーがアクセスできるトークンの数量を決定します。
限定承認は、特定のスワップに必要な500 USDCのように、スペンダーが特定の数量のトークンのみを移動することを承認します。その500 USDCが転送されると、許容量は使い切られます。次のスワップには新しい承認が必要となり、別のブロックチェーントランザクションと追加のネットワーク手数料が発生します。
無制限承認は、スペンダーがそのトークンの最大可能量(技術的には2^256 − 1という、あらゆるトークンの総供給量をはるかに超える数値)を移動することを承認します。これは、コントラクトが将来にわたって別の承認を必要とすることなく、そのトークンのユーザーの全残高にアクセスできることを意味します。ほとんどのアプリはデフォルトで無制限承認を要求します。これにより、ユーザーの手間が軽減されるためです。一度承認すれば、そのトークンを使った将来のすべてのトランザクションが事前承認されます。
利便性は確かにありますが、リスクも同様に存在します。無制限承認には有効期限がありません。承認が付与されたコントラクトが後に悪用されたり、悪意を持ってアップグレードされたり、あるいはユーザーが正規のアプリを模倣したフィッシングサイトで承認に署名した場合、攻撃者はユーザーからの追加インタラクションなしに、承認が対象とするすべてのトークンを引き出すことができます。被害者は、トークンが消えるまで承認の存在に気づかないこともあります。
考慮事項 | 限定トークン承認 | 無制限トークン承認 |
承認金額 | 特定(例:500 USDC) | 最大可能量(残高全体、無期限) |
持続性 | 指定金額の転送後に消費される | 手動で取り消すまで有効 |
ユーザーの手間 | トランザクションごとに新しい承認が必要(追加ネットワーク手数料) | 1回の承認で将来のすべてのトランザクションをカバー |
コントラクトが悪用された場合のリスク | 損失は承認金額に限定される | トークン残高全体がリスクにさらされる |
一般的な使用例 | セキュリティを重視するユーザー、高額トランザクション | ほとんどのアプリのデフォルト |
2022年11月、Uniswap Labsは従来のトークン承認の手間とリスクに対処するため、Permit2と呼ばれるコントラクトをデプロイしました。2025年までに、310万以上のEthereumメインネットアドレスがPermit2コントラクトを承認し、Uniswap、1inch、CowSwap、その他多くのプロトコルで使用される、DeFiで最も広く統合された承認システムとなりました。
核心的なアイデアは次のとおりです:すべてのアプリのスマートコントラクトに個別のブロックチェーン承認を付与する代わりに、ユーザーはPermit2コントラクトに単一の承認を付与します。そこから、各アプリとのインタラクションは、どのトークンを、いくつ、どのスペンダーに、いつまで(期限後は権限が失効する)という内容を指定したウォレット内で署名されたオフチェーンシグネチャーによって承認されます。
従来の承認に対する改善点は重要です。Permit2シグネチャーには期限が含まれているため、古い権限は永続することなく自動的に失効します。ノンスにより、同じシグネチャーが2回使用されることを防ぎます。また、ユーザーはアプリごとではなくトークンごとに1回承認に署名するため、ブロックチェーン承認トランザクションの総数とそれに関連するネットワーク手数料が削減されます。
トレードオフは攻撃対象の変化です。従来の承認は、数ヶ月または数年前に承認され、後に侵害されたコントラクトという休眠状態のブロックチェーン権限を通じて悪用されていました。Permit2シグネチャーは、署名の瞬間のフィッシングを通じて悪用されます。Permit2承認はEIP-712型付きデータシグネチャーを使用するため、ウォレットにはトランザクション確認ではなく署名プロンプトとして表示されます。悪意のあるサイトは、実際にはユーザーのトークン残高全体の転送を承認するPermit2シグネチャーである「このメッセージに署名する」という通常のリクエストのように見えるものを提示できます。ブロックチェーントランザクションは不要です。ユーザー側からのネットワーク手数料も不要です。署名するだけで、攻撃者はtransferFrom()を呼び出します。
ウォレットドレイナーは、被害者からレガシーおよびPermit2の両方のトークン承認を引き出すために設計された自動フィッシングツールキットです。これらは**ドレイナー・アズ・ア・サービス(DaaS)**として機能します:開発者が悪意のあるスマートコントラクト、フィッシングインフラ、資金ロンダリングパイプラインを管理し、アフィリエイトが盗んだ資金の一部(通常は引き出した金額の75〜95%を保持)と引き換えにサービスをレンタルします。
ウォレットドレイナーの攻撃パターンは、一貫したシーケンスに従うことが多いです:
ステップ1:誘引。 被害者は、スポンサー付き検索結果、偽のエアドロップリンク、侵害されたDiscordサーバー、またはクローンされたアプリインターフェースを通じてフィッシングサイトに到達します。サイトは正規のプロトコルのように見えます:同じブランディング、同じレイアウト、多くの場合ほぼ同一のURL。
ステップ2:署名リクエスト。 サイトはウォレットにトランザクションまたはPermit2シグネチャーへの署名を促します。プロンプトは標準的なアプリ接続、トークンスワップ、またはエアドロップ請求のように見える場合があります。実際には、シグネチャーはドレイナーのコントラクトが被害者のトークンを移動することを承認しています。
ステップ3:引き出し。 攻撃者は別のウォレットからtransferFrom()を呼び出し、承認されたトークンを引き出します。高度なドレイナーキットは、ERC-20、NFT、Permit2承認など複数のトークン転送を単一のマルチコールにまとめ、数秒でウォレットを空にします。資金は分散型取引所とクロスチェーンブリッジを通じてルーティングされ、追跡を困難にします。
重要な点:ブロックチェーンの観点から見ると、すべてのステップは有効で承認されたトランザクションです。被害者は承認に署名しました。コントラクトは承認された通りに実行しました。それを元に戻すプロトコルレベルのメカニズムは存在しません。
一部のウォレットは、ユーザーが確認する前にトランザクションとシグネチャーをシミュレートし、既知のドレイナーコントラクトや不審な承認金額にフラグを立てるようになっています。MetaMaskはBlockaidとの統合を通じてこれを実現しています。これによりリスクが完全に排除されるわけではありません。新しいドレイナーコントラクトはまだ検出データベースに登録されていない可能性がありますが、フィッシングプロンプトとユーザーの確認の間に一層の保護を追加します。
トークン承認を取り消すとは、特定のスペンダーの許容量をゼロに設定することを意味します。これはブロックチェーントランザクションであり、ネットワーク手数料がかかり、ウォレットで確認する必要がありますが、そのコントラクトが指定されたトークンを移動する能力を永続的に削除します。
3つの概念が重要です:
取り消すタイミング。 アプリの使用を終了し、戻る予定がない場合。不要になった無制限承認を付与した後。疑わしいと感じたインタラクションの後(すぐに何も失われなかった場合でも)。定期的な実践として:アクティブな承認の定期的な確認により、目的を果たした権限を発見できます。
取り消しのコスト。 各取り消しは、独自のネットワーク手数料を伴う別のブロックチェーントランザクションです。Ethereumメインネットでは通常数ドルかかりますが、レイヤー2ネットワークでは数セントの端数になることもあります。コストは侵害された承認による潜在的な損失に比べれば小さいですが、数ヶ月のDeFi活動で数十の承認が蓄積されると積み重なります。
取り消しで解決できないこと。 承認を取り消すと、その権限に基づく将来の転送を防ぐことができます。すでに発生した転送を元に戻すことはできません。ドレイナーがすでにtransferFrom()を呼び出した場合、トークンは失われています。取り消しは予防的なものであり、修正的なものではありません。
セルフカストディアルウォレットでの承認の確認と取り消しに関するステップバイステップの手順については、MetaMaskのスマートコントラクトの許容量の取り消し方法をご覧ください。
いくつかの実践により、DeFiインタラクションの利便性を損なうことなくリスクへの露出を減らすことができます。
オプションがある場合は限定承認を設定する。 たとえば、MetaMask拡張機能は要求された承認金額を表示し、確認前にユーザーが支出上限をカスタマイズできるようにします。上限をトランザクションに実際に必要な金額に設定することで、コントラクトが後に侵害された場合の損失を限定できます。
署名プロンプトを読む。 Permit2シグネチャーにはトークン名、金額、スペンダーアドレス、期限が表示されます。「メッセージに署名する」プロンプトにトークンの詳細が表示されている場合、それはログインではなく承認です。金額が予想されるトランザクションサイズではなくユーザーの全残高と一致している場合、それは警告サインです。
接続前にサイトを確認する。 ドレイナーサイトは正規のアプリインターフェースを複製します。信頼できるURLをブックマークし、検索結果、ソーシャルメディアのリンク、またはDMからではなくブックマークからナビゲートすることで、最も一般的な誘引メカニズムを排除できます。
定期的に承認を確認する。 アクティブな承認は数ヶ月のDeFi使用で蓄積されます。ブロックエクスプローラーの承認チェッカーまたは支出上限ダッシュボードを使用した四半期ごとの確認により、目的を果たさなくなった権限を発見できます。