暗号資産ウォレットの「承認」のすべて!~「承認」が世界を動かす~
NFTの分野では、「承認(Approval)」が悪者扱いされることがよくあります。NFTのコミュニティメンバーはウォレットプロバイダーに対してより大きな太字の赤文字を要求し、マーケットプレイスに対して改善を求めているため、当然ながら「承認」への不安は大きくなります。
しかし、正直なところ「承認」なしでは、Web3はほとんど何もできません。今までNFTマーケットプレイスで販売を行ったり、NFTコレクションにオファーを出したりしたことがある方は、すでに「承認」の力を活用していたのです。「承認」により、オフチェーンで条件を設定することができ、オファーがヒットしたり、誰かがあなたのオファーを受け入れるなど、所定の条件が満たされたときに取引が自動的に実行されます。

これにより、その資産を使って他のことをしたり(所有権の証明など)、他のマーケットプレイスに出品したりできるようになります。「承認」が存在しない場合、決済資産、NFT資産、またはその両方を完全に管理できるプラットフォームが必要となります。その場合、複数のマーケットプレイスに出品することができず、資産を保有することのメリットをすべて享受することはできない!
では、「承認」とは具体的に何をするのか?「承認」は、スマートコントラクトにトークン(ERC-20、NFTなど)とやりとりをする権限を与えます。スマートコントラクトに設定されたパラメータに基づいて、それらを自由に操作することができるのです。
Set Approval For All (SAFA)

ERC-1155、ERC-721、ERC-721a規格のNFTコレクションに関しては、いずれも以下のような承認の仕組みを持っています。これらの規格には通常、「承認」と「Set Approval for All(以下SAFA)」の2つの方法がありますが、残念ながら、詐欺師もNFTマーケットプレイスも、より危険な後者(SAFA)を利用しています。
Set Approval For All(すべて承認する): 単一のアドレス(通常は契約/NFTマーケットプレイス)に対して、指定されたウォレット内のNFTコレクション全体の権限を与えます。
Approval(承認): 単一のアドレスに対して、指定されたウォレット内の1つのアセットに限定して権限を付与する(NFTではあまり使用されません)。
「承認」に関連する詐欺は、2つを中心に展開されます:
- 詐欺サイトにアクセスさせ、不正な承認に署名させることで、攻撃者があなたの資産にアクセスできるようにします。
- 詐欺サイトにアクセスさせ、あなたの正式な承認を利用して悪意のある契約内容に署名させる。
注:取引の前にまず署名を求めるのは、多くの人が、あなたの正当な承認を利用した悪意のある署名(ガス代はかからない)で、あなたの資産が盗まれる可能性があることを知らないからです。
パターンが見えてきましたか?詐欺サイトへの誘導は、このゲームの特徴です。私たちは、「場面に合わせたウォレットの使い分け」の記事で、売買をするウォレットを使って怪しいサイトにアクセスすることは、絶対してはいけないと強調しています。また、保管用ウォレット(承認されていないウォレット)を使って不信なウェブサイトにアクセスするのは「安全な署名のための入門講座」の記事にあるように、gasless(ガスレス)署名をするときだけにしてください。
結局、承認すると何が起こるの?
では、実際に承認をするとどうなるのでしょうか?Etherscanで行うのと同じように "Approve "メソッドを呼び出しています(ちなみに、Etherscanの基本についてはこちらの記事で詳しく説明しています)。Apecoinのコントラクトを見て、何が起こっているのか
イメージしてみましょう:

承認するたびに、あなたのウォレットに存在する資産に別の承認された支出者を追加しているにすぎません。デフォルトでは、トークンがERC-20、ERC-721、ERC-1155などの広く受け入れられているトークン標準に準拠している場合、ウォレットの所有者であるあなたは通常、ウォレット内でトークンを送信/受信するアクセス権を持っています。しかし、我々の生徒がすぐに学んだように、異なるルールが適用されるトークンコントラクトを作成することができます😈
ここでは、契約形態ごとに異なる承認方法がどのように機能するかを紹介します:
ERC-721(プロフィール写真/ユニークコレクションNFT)
機能: Approve(承認)
- Spender(送信者) :アクセス権を与える支出者(Openseaやマーケットプレイスなど)
- Token/TokenID: アクセスを許可するTokenID。例: BAYC #4014
機能:SetApprovalForAll(全てを承認)
- Operator(オペレーター): これはSpenderと同じで、あなたのトークンにアクセスすることができます。
- Approved(承認されているか): これは単純なtrueかfalseです。承認されている場合、Operator/Spenderはそのコレクション内のすべてのトークンにアクセスできるようになります(複数のBAYCを持っている場合は、コレクションすべてのトークンにアクセスできるようになります)。
ERC-1155 (半代替性トークン)
機能: SetApprovalForAll(全てを承認)
- Operator(オペレーター): これはSpenderと同じで、あなたのトークンにアクセスすることができます。
- Approved(承認されているか): これは単純なtrueかfalseです。承認されている場合、Operator/Spenderはそのコレクション内のすべてのトークンにアクセスできるようになります(複数のBAYCを持っている場合は、コレクションすべてのトークンにアクセスできるようになります)。
注意:**ERC-1155規格には承認方法がありません。**つまり、ERC-1155の契約に対して「承認」を行うと、そのトークンのすべてに対して承認することになります。私としては、これは見落としのように思えますが、とりあえずそうと理解しましょう。
例: Boring Security, Adidas: Into The Metaverse
ERC-20 (代替可能トークン)
機能: Approve(承認)
- Spender(送信者) :アクセス権を与える支出者(Openseaやマーケットプレイスなど)
- Amount(金額): トークンのうち、どれだけの量を契約に使用するか。この金額はアクティブなまま、時間の経過とともに「使い切る」ことができます。Dookey Dashの中毒者は、800 $apeの承認が設定され、もしかしたら旅のどこかの時点で別の承認をしなければならなかったことを思い出すかもしれません!
機能: IncreaseAllowance (すべてのERC-20トークンがこれを持つわけではありません)
- Spender(送信者) :アクセス権を与える支出者(Openseaやマーケットプレイスなど)
- Amount(金額): どれだけの金額を増やすか
注意:Increase Allowanceは支出者のアドレスに承認が設定されていない場合に呼び出されることが多く、承認の代わりとして機能させることができます。これには気をつけましょう!
例: Apecoin, Wrapped Ethereum, AAVE (Proxy)
よくある詐欺の手口

承認を利用した詐欺は、今日のNFTスペースで最も一般的な詐欺です。この詐欺は、以下のような形で現れることが多い:
- NFTトレーディング詐欺では、詐欺師が偽のトレーディングサイトにユーザーを誘い込み、悪意のある承認を実行させます。
- NFTエアドロップ詐欺では、詐欺師が偽のコレクションサイトにユーザーを誘導し、悪意のある承認を実行させます。
- パクリNFTの詐欺サイトで、詐欺師が悪意のある承認を実行させようとするもの。
- 偽のマーケットプレイス…まぁ良くご存じでしょう。

これらの全ての詐欺には、承認(正当なものであれ悪意のあるものであれ)が悪意を持って利用されるというパターンが見ることができます。また、これらの詐欺の大部分はフィッシングです。
もしかしたら、あなたはOpenseaに向かったと思っているかもしれませんが、「詐欺師によるフィッシングと手口」の記事では、詐欺師があなたを騙して一生懸命稼いだトークンを奪う汚い手口についてもっと詳しく知ることができます。
承認についてもっと知りたい、または承認が多すぎるかもしれないとお考えなら「Revoke.Cashによる承認の取り消し」の記事をチェックしてみてください!
Web3セキュリティについてもっと知りたい、最新のセキュリティ情報、詐欺、戦術について知りたいという方は、私たちのディスコード(https://discord.gg/boringsecurity)に参加してください。


