WATS Wallet
技術7 分で読めます

トークンのApproval、Allowance、Permit:実際に何に署名しているのか

トークン承認とは、トークンコントラクトに保存される恒常的な許可であり、特定のコントラクトが二度と尋ねることなく、あなたの残高を決められた額まで使えるようにするものです。ERC-20のallowanceが実際にどう機能するのか、PermitとPermit2が何を変えるのか、なぜいまや署名がかつての承認と同じ重みを持つのか、そしてWATSのようなノンカストディアルウォレットが後片付けにどう関わるのかを解説します。

Alltoscan LLC(WATS Wallet の開発元)による記事 編集ポリシー

公開日 更新日

トークン承認(approval)とは、ERC-20トークンコントラクトの内部に保存されるオンチェーンの許可——allowance——であり、特定のコントラクトが、あなたのトークンを特定の量まで、後からいつでも、再度あなたに尋ねることなく使ってよい、と記録するものです。これはapprove()トランザクションによって作られ、それを与えたときのやり取りよりも長く生き続けます。ウェブサイトは消えても、allowanceは残るのです。Permit(EIP-2612)はその別建てのトランザクションを、dAppが自身のアクションと一緒に提出するオフチェーン署名に置き換えます。Permit2は、EIP-2612を一度も実装しなかったトークンにも、同じ期限付き・金額限定のモデルを広げます——つまり、いまや署名ひとつが支出権限を手渡しうるということであり、署名リクエストはかつて承認が受けていたのと同じ厳しさで精査されるべきです。防御策は地味です。無制限ではなく限定額を承認すること、そして使わなくなったallowanceを取り消すこと。WATSのような完全にノンカストディアルなウォレットでは——鍵を持つのはあなたで、WATSが鍵を持つことは決してありません——承認もPermit署名も取り消しも、あなた自身の鍵が署名しない限り起こりません。しかもEVMネットワークではWATSのネットワーク手数料がひとつのトークンATSで課金されるため、そのチェーンのネイティブガストークンがないという理由で掃除のトランザクションが先送りになることもありません。

dAppはなぜ承認を求めるのか

ERC-20トークンには、Web3のUXの半分を形作っている特性があります。スマートコントラクトは、たとえあなたが望んでいても、あなたのアドレスからトークンを勝手に取ることができないのです。あなたのUSDCをスワップするDEXは、まず明示的な許可を必要とします。だからこそ多くの操作が2段階になります——まずapproveトランザクション、それから実際のスワップや入金です。承認は形式的なものではありません。恒常的な支出権限の付与であり、それを与えたトランザクションよりも長く生き続けます。

approve()が実際に与えるもの

承認に署名すると、トークンコントラクトはallowanceを記録します。アドレスX(dAppのコントラクト)は、そのallowanceが使い切られるか、引き下げられるか、取り消されるまで、いつでもあなたのトークンを最大N個まで使えるという記録です。重要な性質は2つ。第一に、allowanceはトークンコントラクトの中に存在し、与えられるのはあなたが承認したコントラクトであって、訪れたウェブサイトではありません——UIが消えても許可は残ります。第二に、支出の瞬間にあなたの関与は一切不要です。一度付与されれば、承認されたコントラクトは、あなたの追加署名なしに、その後のどのトランザクションでもトークンを引き出せます。それこそが承認を便利にしているものであり——そのまま攻撃面にしているものでもあります。

無制限承認:便利さと、恒久的なリスク

承認のたびにガスがかかるため、多くのdAppは二度と承認せずに済むよう、事実上無制限のallowanceを要求します。便利さは本物ですが、引き換えも本物です。あるコントラクトへの無制限のallowanceは、そのトークンの全残高が永遠にそのコントラクトのセキュリティに依存することを意味します。コントラクトが何年も後に悪用されたら——あるいは最初から悪意あるものだったら——攻撃者にあなたの鍵も署名も必要ありません。あなたが与えたallowanceで十分なのです。最大級のウォレット・ドレイン事件の多くは鍵の窃取ではなく、古い承認の換金でした。

PermitとPermit2:署名による承認

現代的な改良がPermit(EIP-2612)です。オンチェーンのapproveトランザクションの代わりに、dAppが自身のアクションと一緒に提出するオフチェーンのメッセージに署名します——2回のトランザクションが1回に、承認用の別途ガスは不要、しかも許可には期限を設定できます。Permit2はこの考え方をEIP-2612を実装していないトークンにも一般化し、共有の承認ハブとして機能します。まずPermit2コントラクト自体に通常のオンチェーン承認を1回だけ行い、以後は各dAppが、それぞれの金額と有効期限を持つ署名によって認可される、という仕組みです。この取引条件は正確に押さえておく価値があります——Permit2は承認を廃止するのではなく、一箇所に集約します。したがって、Permit2に与えた恒常的なallowance自体が、管理し続けるべき承認なのです。これらは本物の改善ですが、何が変わったかに注意してください。かつてトランザクションが担っていた仕事を、いまや署名が担っています。誤ったPermitメッセージに署名させるフィッシングサイトは、悪意ある承認と同じ結果を得ます——だからこそ署名する内容を読むことが、これまで以上に重要なのです。

攻撃面:ドレイナーと放置されたallowance

承認の悪用には2種類あります。能動型:ドレイナーサイトが本物のdAppになりすまし、「クレーム」や「ウォレット認証」といった無害そうな操作を装って承認(またはPermit署名)を要求します。受動型:何年も前に正当なコントラクトへ与えたallowanceが、そのコントラクトや管理者キー、アップグレード経路が侵害されるまで眠り続けます。どちらも、接続して承認するフローをWeb3のセキュリティ上最も重要な瞬間として扱うべき理由です——安全なやり方はウォレットをdAppに安全に接続する方法で解説しています。

実際に効く承認の衛生習慣

3つの習慣でリスクの大半をカバーできます。dAppが許すなら、特に大きな残高では限定額を承認する——後で追加の承認をするのは安い保険です。信頼できる承認チェッカーで定期的にallowanceを確認・取り消しし、もう使わないものは除去すべき死荷重として扱う——取り消しとは、allowanceをゼロに戻すそれ自体がオンチェーンのトランザクションなので、他と同じようにガスがかかり、あなたの署名を必要とします。そして本気の資産は、承認に一切署名しないアドレスに、アクティブなdApp用ウォレットと分けて保管する。より多層的な習慣はウォレットセキュリティのベストプラクティスにあります。署名リクエストが表示されたら、署名する前にその種類ごとに読んでください。

  • トークン承認(approveまたはsetApprovalForAll):支出者のアドレスと金額を確認してください。見覚えのない支出者への無制限の金額は危険信号です。
  • EIP-2612 PermitまたはPermit2の型付きデータ:支出者、金額、期限を確認してください。見慣れない支出者や長い期限の署名は、目に見えるトランザクションなしに支出権限を渡してしまいます。
  • EIP-7702の認可:委任先のアドレスを確認してください。署名すると、あなたのアカウントのコードがそのコントラクトを指すようになります。委任先に見覚えがなければ拒否し、EIP-7702の委任を確認して取り消す方法を参照してください。
  • 通常のpersonal_signメッセージ:文章が読める内容で、あなたの行っている操作と一致していることを確認してください。たとえば見覚えのあるサイトのログインメッセージならよく、無害な認証を装った読めない16進データには警戒してください。

WATSの位置づけ

承認とは署名であり、署名はウォレットの領分です。WATSは完全にノンカストディアルです——鍵を持つのはあなたで、WATSが鍵を持つことは決してありません——だからすべての承認、Permit署名、取り消しは、Chrome拡張機能、モバイルアプリ、あるいはWATSから、Ethereum、BNB Smart Chain、Arbitrum One、Optimism、Base、Polygon、Gnosis、Celo、Mantle、Cronos、Solana、TONを横断して、あなたの鍵が署名したときにのみ実行されます。それは同時に、どんなウォレットにもできることの正直な限界も示しています。ウォレットはリクエストを表示できますが、その支出者と金額が本当にあなたの意図したものかを判断できるのは、あなただけです。

手数料の側は、古いallowanceを放置するもうひとつのよくある言い訳を取り除きます。WATSでは、EVMネットワークにおいて、承認や取り消しのトランザクションを含むすべての操作が、そのチェーンのネイティブガストークンではなく、ひとつのトークンATSで課金されます——ERC-4337ペイマスターを通じて。この仕組みはChrome拡張機能でもモバイルアプリでも同じです。SolanaとTONもWATSが完全にサポートするチェーンで、Solanaの取引のネイティブ手数料はSOLで支払われ、TONの手数料もATSで支払われます。これは割引ではありません。ネットワークには支払われるべきものが支払われ、原価も変わりません。変わるのは、どのトークンで支払うかだけです。ATS自体はBSC(BNB Chain)上にあり、チェーンごとに残高を用意する必要はなく、どのEVMネットワークの手数料もその1つの残高から差し引かれます。集められたATSはバーンされ、供給量は1億から3,000万の下限へと減っていきます。WATS Walletはこの組み合わせを備えています。

つまり、この記事の実践版は短いルーティンです。限定額の承認を優先する。Permit署名が実際に何を認可するのかを、署名する前に読む。そして四半期に一度、承認チェッカーを開いて、もう使わない支出者を一掃する。具体的な一歩は、そのルーティンを、あなたと鍵のあいだに決して割り込まないウォレットから実行することです。WATSのChrome拡張機能、モバイルアプリでは、すべての承認とすべての取り消しは、あなた自身の鍵が署名したからこそ存在します——WATSが鍵を持つことは決してありません——そしてEVMネットワークでは、取り消しの費用は、そのチェーンがたまたま要求するネイティブガストークンではなく、ATSで支払われます。

よくある質問

トークンのallowanceとは何ですか?

Allowanceとは、ERC-20トークンコントラクトに記録される恒常的な許可のことです。特定のコントラクトがあなたのトークンを特定の量まで使ってよい、という取り決めです。approveトランザクションに署名したときに作られ、使ったウェブサイトとは無関係に、使い切られるか変更・取り消しされるまで存続します。支出の瞬間、承認されたコントラクトはあなたの追加署名を一切必要としません。

無制限(インフィニット)承認は安全ですか?

便利ですが、恒久的なテールリスクを伴います。そのトークンの全残高が、承認したコントラクトが未来永劫悪用されず悪意も持たないことに依存するのです。小さなアクティブ残高なら便利さが勝つことが多いでしょう。大きな保有には限定額を選び、使わなくなったallowanceは定期的に取り消してください。大規模なドレイン事件の多くは、盗まれた鍵ではなく悪用された古い承認でした。

Permitと通常の承認の違いは何ですか?

通常の承認は、dAppが行動する前にガスを消費する独立したオンチェーントランザクションです。Permit(EIP-2612)はそれをオフチェーン署名に置き換え、dAppが自身のトランザクションに同梱します——1ステップで、期限も設定可能。Permit2はこのパターンをネイティブPermit非対応のトークンにも拡張し、Permit2コントラクトへの1回のオンチェーン承認を土台に、以後は各dAppごとの署名がそこから権限を引き出します。セキュリティモデルもそれに応じて移ります。署名が支出権限を与えられるようになった以上、署名リクエストは承認とまったく同じ厳しさで精査してください。

トークン承認はどうやって取り消しますか?

取り消しとは、allowanceをゼロに戻すことであり、それ自体がオンチェーンのトランザクションです。信頼できる承認チェッカーか、そのトークン自身のインターフェースを開き、対象の支出者コントラクトを選び、allowanceを0にするトランザクションに署名します(Permit2で与えた権限は、Permit2独自のlockdown/有効期限の仕組みで取り消します)。ガスがかかり、あなたの署名が必要で、効果は実行したチェーンにしか及びません——Ethereum上のallowanceはArbitrumやBase、Polygon上のものとは別物なので、チェーンごとに掃除する必要があります。

トークン承認の管理にはどのウォレットを使うべきですか?

支出者と金額を分かりやすく表示するノンカストディアルウォレットであれば、どれでもこの役割を果たせます。EVMで手数料トークンも一つにしたいなら、WATS Walletは実務的な選択肢です。完全にノンカストディアルで——鍵を持つのはユーザーで、WATSが鍵を持つことは決してありません——だからすべてのapprove、Permit署名、取り消しは、あなた自身の鍵が署名したからこそ存在します。Chrome拡張機能、モバイルアプリから、Ethereum、BNB Smart Chain、Arbitrum One、Optimism、Base、Polygon、Gnosis、Celo、Mantle、Cronos、Solana、TONを横断して使え、NFCメタルカードはペアリングした端末でのタップ認証のステップとして利用できます。さらにWATSはEVMネットワークの手数料を、各チェーンのネイティブガストークンではなくひとつのトークンATSで課金するため、複数のEVMチェーンにまたがる取り消し作業が、ガストークン違いで止まることはありません。Solanaではネイティブ手数料をSOLで支払い、TONの手数料もATSで支払います。とはいえ、署名の前に支出者と金額を読む必要をなくせるウォレットは存在しません——その判断はあなたに残ります。

出典

  1. ERC-20: Token Standard — Ethereum Improvement Proposals · 確認日
  2. ERC-2612: Permit Extension for EIP-20 Signed Approvals — Ethereum Improvement Proposals · 確認日
  3. Permit2 Overview — Uniswap Developers · 確認日
  4. EIP-712: Typed structured data hashing and signing — Ethereum Improvement Proposals · 確認日
  5. EIP-7702: Set Code for EOAs — Ethereum Improvement Proposals · 確認日

関連記事

ガイド
ウォレットの基礎

ウォレットをdAppに接続する方法(そして安全を保つ方法)

ウォレットをdAppに接続することは、Web3を使う手段であり、同時に損失の多くが起こる場所でもあります。WATSはデスクトップではブラウザ拡張機能で、モバイルではWalletConnectのQRで接続します。接続・署名・承認がどう違うのか、そしてどう取り消すのかを解説します。

9 分で読めます
ガイド
セキュリティと詐欺

暗号資産ウォレットのセキュリティ:資産を守る12のベストプラクティス

互いに積み重なる暗号資産ウォレットのセキュリティ対策12選:オフラインでの復元フレーズのバックアップ、ホットとコールドの分離、アドレスの確認、承認の取り消し、フィッシング対策、そして任意のタップ認証という物理的要素。

9 分で読めます
技術
ウォレットの基礎

スマートアカウント対EOA:Ethereumウォレットはどう変わりつつあるか

EOAは固定されたルールを一つだけ持つ素の鍵ペアであり、スマートアカウントはルールがコントラクトコードに存在するアカウントです。リカバリー、支出上限、バッチ処理、セッションキー、paymasterによる手数料の支払い。コスト、互換性、カストディの観点で両者を比較し、EIP-7702が一つのアドレスに両方を兼ねさせる仕組みを解説します。

6 分で読めます