スワップが完了しても、その背後にある権限が有効なままになっている場合があります。トークン承認を行うと、指定したアドレスが、付与した権限の範囲内でウォレットからトークンを使用できるようになります。アプリケーションを閉じても、その権限が必ず削除されるとは限りません。
このガイドでは、Ethereumおよびその他のEVMネットワーク上のERC-20トークンを取り上げます。その他のトークン規格やブロックチェーンでは、異なる権限システムが使用されます。実際に行うべきことは、承認する前に、使用者、金額、範囲を理解し、その後、不要になった権限を削除することです。
アローアンスは使用者に設定された利用上限です
一般的なERC-20のワークフローでは、approveがアローアンスを設定し、allowanceが残りの金額を報告し、transferFromによって承認された使用者がトークンコントラクトのルールに従ってトークンを移動できます。通常、承認トランザクションによって権限が設定され、その後のアプリケーションの操作でその権限が使用されます。
4つの項目を確認してください。ネットワーク、トークンコントラクト、所有者アドレス、使用者アドレスです。ウェブサイトの名前自体が権限なのではありません。使用者はアプリケーションのコントラクトや別のアドレスである場合があり、そのコードによって、その権限をどのように使用できるかが決まります。
200トークンを保有する架空のウォレットを考えてみましょう。使用者に100トークンの使用を承認します。トークンが実際に移動するまでは、残高は200のままです。その後、使用者が標準的な有限アローアンスのもとで40トークンを移動すると、残高は160になり、残りのアローアンスは60になります。これらは別々の数値です。
使用者は、適用されるコントラクトのルールに従い、別の承認画面を表示することなく、残りの権限を使用できる場合があります。通常、新しい承認を行うと、既存のアローアンスは指定した金額に置き換えられます。指定した金額が古い上限に自動的に加算されるわけではありません。
無制限の承認は将来の入金にも及ぶ可能性があります
アプリケーションは、取引のたびに新たな承認を行わなくて済むよう、非常に大きなアローアンスを要求する場合があります。これにより、繰り返しの手順や承認コストを減らせる一方で、使用者の権限にさらされる金額が大きくなります。
一般的な実装の中には、最大整数のアローアンスを無制限として扱い、トークンが使用されてもそのアローアンスを減らさないものがあります。無制限の権限が使用のたびに少しずつ消費されるとは限りません。
トークン残高がゼロになっても、アローアンスが残る場合があります。その後、同じネットワーク上の同じアドレスに同じトークンを再び受け取ると、既存の権限が再び使用可能になることがあります。ウォレットの表示が空であっても、以前の権限が消えたことにはなりません。
上限を小さく設定すると、その権限を通じて利用できる金額を減らせます。ただし、それによってアプリケーションが信頼できることや、提案された取引が妥当であることが保証されるわけではありません。
実際に付与した権限を取り消す
アプリケーションの使用をやめたとき、使用者を特定できないとき、不必要に大きな上限が設定されていることに気付いたとき、または関連するセキュリティインシデントを知ったときは、アローアンスを確認してください。目的は、不要な支出経路を削除することです。
- アカウントとネットワークを確認します。 あるチェーン上の権限は、別のチェーン上の権限とは別のものです。
- トークンと使用者を特定します。 信頼できるウォレットの権限画面、または適切なブロックエクスプローラーを使用します。見慣れたラベルだけでは、アドレスを確認したことにはなりません。
- 変更内容を読みます。 標準的なERC-20アローアンスの場合、通常、取り消しでは、その使用者のアローアンスをゼロに設定するオンチェーントランザクションを送信します。トークン、使用者、新しい金額を確認してください。
- 確認完了を検証します。 オンチェーンでの取り消しには、サービスがガス代を負担する場合でも、ネットワーク手数料がかかります。トランザクションが成功し、該当するアローアンスが意図した変更を反映していることを確認してください。
取り消しが保留中の場合、チェーンの状態はまだ変更されていません。確認が完了する前に、使用者が操作する可能性があります。取り消しが完了すると、そのアローアンスの今後の使用は制限されますが、すでに移動されたトークンが戻るわけではありません。
ウェブサイトとの接続を解除すると、ウォレットとそのサイトとの接続が変更されます。既存のオンチェーン承認を変更するには、別の操作が必要です。秘密鍵やリカバリーフレーズが漏洩した場合、権限はインシデントの一部にすぎません。取り消しを行っても、他者がそれらの鍵を使って署名する能力はなくなりません。
KTXと併用して個人ウォレットを使用する場合は、ウォレットの権限とプラットフォームアカウントのセキュリティを分けて管理してください。KTXのカストディアルウォレットとノンカストディアルウォレットに関するガイドでは、取引の承認と復元を誰が管理するのかを説明しています。復元情報の保護についてはKTXのシードフレーズのバックアップガイドを参照し、権限の取り消しを申し出るウェブサイトに復元フレーズを決して提供しないでください。
署名による権限には追加の確認が必要です
ウォレットでは、承認トランザクションをすぐに実行する代わりに、署名を求められる場合があります。署名によっても、重要な権限が作成される可能性があります。たとえばERC-2612のpermitでは、別の当事者が署名済みの承認を送信して、アローアンスを設定できます。
permitの有効期限は、その署名を送信できる期間を制限します。ただし、結果として作成される通常のERC-20アローアンスに自動的に有効期限が設定されるわけではありません。アローアンスをゼロに設定しても、古く未使用のpermit署名が必ず無効になるとは限りません。nonceや有効性のルールを別途確認する必要があります。
Permit2では、さらに別の層が加わります。まずトークンからPermit2コントラクトへの承認があり、その後、特定のアプリケーションに対する権限が設定されます。アローアンスに基づく権限と、一度限りの署名による移転では、金額、有効期限、nonceに関するルールが異なります。
該当する各層と、残っている署名済みの承認を確認してください。現在のオンチェーンアローアンスを読み取るチェッカーでは、署名済みであってもまだ送信されていないすべての署名が表示されるとは限りません。安心できそうなアローアンス画面でも、まだ確認できない権限まで把握することはできません。
よくある質問
ネイティブETHを送るにはERC-20承認が必要ですか?
ネイティブETHの通常の送金では、ERC-20アローアンスは使用されません。Wrapped ETHはトークンであり、この仕組みを使用できます。アカウントレベルの権限は別の問題です。
無制限の承認1つで、ウォレット内のすべての資産をカバーできますか?
通常のERC-20承認は、特定のトークンと使用者に関するものです。すべてのトークンやNFTを自動的にカバーするわけではありません。ただし、1回の署名リクエストに複数の権限が含まれることがあるため、その全範囲を確認してください。
変更する前に、アローアンスをゼロに設定するようウォレットから求められるのはなぜですか?
一部のトークン実装ではそれが必要であり、ゼロ以外のアローアンスを置き換えると、トランザクションの順序に関するリスクが生じる可能性があります。サポートされている手順に従ってください。リセットを行っても、すでに発生した支出を取り消すことはできません。
ハードウェアウォレットが有害な承認を防いでくれますか?
ハードウェアウォレットは署名鍵の保護に役立ちます。ただし、その鍵を使って危険な権限を承認することは可能です。デバイスだけを頼りにせず、取引の詳細と使用者を確認してください。
NFTの承認はトークンのアローアンスと同じように機能しますか?
ERC-721では、個別のNFTに対する承認と、そのNFTコントラクト全体に対するオペレーター承認がサポートされています。これらは、ERC-20の数量アローアンスとは異なります。取り消す前に、規格と範囲を確認してください。
この記事は一般的な教育を目的としたものであり、個別のセキュリティまたは投資に関するアドバイスではありません。トークンの実装やウォレットのインターフェースは異なります。秘密鍵やリカバリーフレーズを決して開示しないでください。