dAppを切断してもトークン許可が残る理由と取り消す方法

MetaMaskでdAppから切断しても、過去に付与したトークン許可はオンチェーン上に残り続ける。接続解除はウォレットとdAppの表面的なつながりを切るだけであり、スマートコントラクトがトークンを動かす権限とは無関係だ。安全を確保するには、接続を切ることに加えてトークン許可の取り消しまで行う必要がある。

dAppを切断してもトークン許可が残るのはなぜか

dAppを切断してもトークン許可が残るのはなぜか

結論から言えば、ウォレットの接続とトークン許可はまったく別の仕組みだ。切断操作で消えるのは前者だけであり、後者はブロックチェーン上に記録されたまま独立して存在し続ける。

多くの利用者が「切断したからもう安全」と思い込みがちだが、これは大きな誤解だ。暗号資産のウォレットとdAppの関係には、実は4つの段階がある。

ウォレット接続とは

ウォレット接続とは、自分のウォレットとdAppの操作画面(フロントエンド)をつなぐ作業だ。dAppがあなたのアドレスを認識し、残高を表示したり、署名リクエストを送ったりできるようになる。

これは例えるなら、お店に入店して会員証を見せるようなものだ。店側はあなたが誰かを認識するが、それだけで財布の中身を勝手に使えるわけではない。接続を切るのは店から出ることに相当し、その場の関係は終わる。

トークン許可(承認)とは

一方、トークン許可(approval / アローワンス)は、特定のスマートコントラクトに対して「あなたの指定したトークンを一定量まで動かしてよい」とオンチェーン上で認める行為だ。これはブロックチェーン自体に記録されるため、dAppの画面から切断しても消えることはない。

たとえばUSDCをあるdAppに許可した場合、その記録はイーサリアムのネットワーク上に永久に残る。許可を取り消すには、別途オンチェーンのトランザクションを発行する必要がある。

切断しても許可が残る仕組み

この2つの概念が分離しているため、次のようなことが起きる。

  • dAppにウォレットを接続する
  • トークンの使用許可(承認)を与える
  • dAppから切断する
  • トークン許可はオンチェーンに残ったままになる

切断はあくまで「画面とのつながりを切る」操作だ。オンチェーン上の許可データには一切触れない。したがって、どれだけ丁寧に切断しても、過去に与えた許可は独立して生き続ける。

残った許可にはどんなリスクがあるのか

残った許可にはどんなリスクがあるのか

残ったトークン許可が危険なのは、そのスマートコントラクトに脆弱性があったり、悪意のあるコントラクトだったりした場合だ。許可を与えた相手が「無制限にUSDCを動かせる」状態なら、あなたのウォレットから直接トークンを引き出すことが可能になる。

実際に起きる被害の典型は、利用をやめたdAppのコントラクトが後から攻撃され、許可を残していたユーザーの資産が流出するケースだ。接続を切っていたとしても、オンチェーンの許可は有効なので防御にならない。

また、悪意のあるdAppに一度「無制限」の許可を与えてしまうと、相手はいつでもあなたのトークンを動かせる。接続状態は関係ない。許可を取り消すまで、その権限は残り続ける。

ウォレットに残る許可を確認する方法

ウォレットに残る許可を確認する方法

まずは自分のウォレットにどのような許可が残っているかを確認する。専門的なツールを使えば、アドレスを入力するだけで一覧を表示できる。

Revoke.cashで確認する

トークン許可の確認と取り消しには、Revoke.cashが広く使われている。イーサリアムをはじめとする多数のEVM対応チェーンをサポートしており、ウォレットを接続すると現在有効な許可の一覧が表示される。

このツールは許可の確認と取り消しの両方に対応している。接続したウォレットのアドレスに対して、どのコントラクトがどのトークンにどれだけの権限を持っているかが一覧化される仕組みだ。

Etherscanで確認する

Etherscanにはトークン承認を確認できる専用ページがある。ウォレットアドレスを入力すると、そのアドレスが過去に付与したトークン許可の一覧が表示される。Revoke.cashと同様、どのコントラクトにどのトークンの権限を与えたかが分かる。

こちらは確認が中心で、取り消し操作を行うにはウォレットの接続とトランザクション発行が必要になる。まずは可視化して現状を把握する用途に向いている。

不要なトークン許可を実際に取り消す手順

不要なトークン許可を実際に取り消す手順

許可の取り消しはオンチェーンのトランザクションなので、必ずガス代(手数料)がかかる。ネットワークが混雑しているとガス代は高くなるため、比較的空いている時間帯を選ぶと出費を抑えやすい。

Revoke.cashを使った手順は次のとおりだ。

  1. Revoke.cashにアクセスする
  2. 確認したいウォレットを接続する
  3. 対象のチェーンを選択する
  4. 表示された許可一覧を確認する
  5. 不要な許可の取り消しボタンを押す
  6. ウォレットでトランザクションを承認する
  7. ガス代を支払って完了する

許可の取り消しはチェーンごとに独立している。イーサリアムで取り消しても、同じdAppにPolygonやArbitrumで与えた許可は別に残る。複数のチェーンを使っていた場合は、それぞれで確認と取り消しを行う必要がある。

また、MetaMaskの新しいバージョンでは、dAppごとに許可の範囲を制限できる仕組みも導入されつつある。利用上限や有効期限を設定できるケースもあるため、dApp側が対応していれば「無制限の許可」を避けられる。

トークン許可を安全に管理するためにできること

トークン許可を安全に管理するためにできること

被害を防ぐためには、日頃から次のような習慣を身につけるのが有効だ。

  • 使わなくなったdAppの許可はすぐに取り消す
  • 無制限の許可ではなく、必要な量だけを承認する
  • 定期的にRevoke.cashで許可一覧を見直す
  • 複数のチェーンを使っている場合は各チェーンを確認する
  • 見知らぬdAppには安易に接続しない

特に「無制限」の許可はリスクが大きい。どうしても必要な場合を除き、使用する分だけの量を承認するか、利用後にこまめに取り消すのが安全側の運用だ。

よくある質問

dAppを切断したのにトークンが盗まれることはある?

ある。接続の切断は見た目の関係を切るだけで、オンチェーン上のトークン許可は残っている。許可を与えたコントラクトに問題があれば、切断後でもトークンを動かされる可能性がある。

すべてのトークン許可を取り消すべき?

使っていないdAppの許可は取り消しておくのが望ましい。頻繁に使うdAppであっても、必要がなくなった時点で取り消す習慣をつけるとリスクを大幅に減らせる。ガス代がかかるため、タイミングを見計らうとよい。

トークン許可を取り消すとガス代はかかる?

かかる。取り消しはオンチェーンのトランザクションであり、ネットワークの混雑状況に応じたガス代が必要になる。混雑していない時間帯を選ぶと安く済むことが多い。

ETHなどネイティブトークンにも許可は必要?

必要ない。ETHなどのネイティブトークンは、ERC-20トークンのような承認(approve)の仕組みを使わない。直接送金されるため、許可が残るという概念自体が存在しない。許可を気にする必要があるのはUSDCやDAIなどのERC-20トークンだ。

許可を取り消すとdAppは再び使えなくなる?

再び使う場合は、そのときにもう一度承認すればよい。取り消しは過去の許可を無効にするだけなので、必要になれば同じ操作をやり直すだけで再び利用できる。

この記事のポイント

  • dAppの切断とトークン許可の取り消しは別物
  • 接続を切ってもオンチェーン上の許可は残り続ける
  • Revoke.cashなどで残っている許可を定期的に確認する
  • 不要な許可はガス代を払って取り消す
  • チェーンごとに独立しているため各ネットワークで確認する
共有:

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)