ERC-721インターフェースとは?
ERC-721インターフェースは、Ethereumおよび互換性のあるブロックチェーンネットワーク上で非代替性トークンを表し、移転するために使用される、スマートコントラクトの関数とイベントを標準化したものです。非代替性トークン(NFT)は、同一の単位と交換可能な数量ではなく、固有の識別情報を持つトークンを表します。公式のERC-721仕様では、ウォレット、アプリケーション、スマートコントラクト、ブロックチェーンツールがNFTの所有権を確認し、標準化された送金を実行する方法を定めています。
このインターフェースは、NFTが何を表すのか、その価値、またはリンク先のコンテンツが本物かどうかを決定するものではありません。異なる暗号資産アプリケーションがNFTコントラクトと連携するための共通の技術仕様を定めます。ERC-721規格はEthereum Improvement ProposalのプロセスでFinalステータスに到達しており、固有のブロックチェーン資産向けの主要な規格の一つとして利用されています。ERC-721は、デジタルコレクティブル、ゲームアイテム、会員資格証明、仮想土地、イベントチケット、ドメインのような資産、金融ポジション、トークン化された記録などに利用できます。インターフェースが重要な理由
スマートコントラクトのインターフェースは、互換性のあるソフトウェアがコントラクトに備わっていることを期待する外部関数やイベントを定義します。共通のインターフェースがなければ、NFTプロジェクトごとに異なる関数名や送金ルールが使われる可能性があります。その場合、ウォレットや分散型アプリケーションには、コレクションごとに専用のコードが必要になります。ERC-721インターフェースにより、ソフトウェアは
ERC-721トークンが非代替性である理由
ERC-721の各トークンには、トークンIDと呼ばれる一意の符号なし整数が割り当てられています。トークンは、ブロックチェーンネットワーク、コントラクトアドレス、トークンIDの組み合わせによって完全に識別されます。あるコントラクトのトークンID 100は、別のコントラクトのトークンID 100とは無関係です。規格では、トークンIDが0から始まること、順番に増えること、予測可能なパターンに従うことは求められていません。アプリケーションは、存在するIDを推測せず、すべてのトークンIDを不透明な識別子として扱ってください。コアERC-721所有権モデルでは、有効な各トークンIDに同時に1人の所有者が存在します。NFTは完全な1つのトークンとして移転できますが、分割所有には基本インターフェース以外の別のコントラクトまたはトークン構造が必要です。ERC-721コアインターフェースID
ERC-721のコアインターフェースは、ERC-165を通じて
互換性のあるコントラクトは、この識別子を指定して
ERC-165インターフェース検出規格では、インターフェースに含まれる関数セレクターにXORを適用してインターフェース識別子を計算します。
ERC-165を使うと、アプリケーションは連携を試みる前に、どの標準インターフェースに対応しているとコントラクトが申告しているかを確認できます。肯定的な応答は互換性の確認に役立ちますが、すべての関数が正しく実装されていることを独立して証明するものではありません。価値のある資産を扱うアプリケーションでは、コードレビュー、テスト、トランザクションのシミュレーションも必要になる場合があります。ERC-721の主なインターフェース関数
必須のERC-721インターフェースには、所有権照会、送金、承認管理の各関数が含まれます。主な関数は、
balanceOf関数
ownerOf関数
transferFrom関数
互換性のないコントラクトに
safeTransferFrom関数
ERC-721では、
受取人がスマートコントラクトの場合、送金処理でそのコントラクトの
IERC721Receiverとは?
必須関数は
受取に成功すると関数セレクターを返します。一般的には
最新のERC-721実装ドキュメントには、受取インターフェースと、安全な送金を受け入れる必要があるコントラクト向けの基本的なホルダーユーティリティが含まれています。
受取コントラクトは、コールバックを重要な会計処理に使用する前に、呼び出し元のNFTコントラクトを確認してください。ERC-721受取コールバックのリスク
コントラクトへの安全な送金では、受取人への外部呼び出しが発生します。元のトランザクションが終了する前に、受取人が追加のコードを実行する可能性があります。送金元のアプリケーションで内部状態の更新が完了していない場合、リエントランシーが発生する可能性があります。悪意のある受取人は、コールバック中に元のコントラクトの別の関数を呼び出そうとする場合があります。Solidityのスマートコントラクトのセキュリティガイダンスでは、設計上可能な場合、外部とのやり取りを行う前にチェックと重要な状態変更を完了することが推奨されています。
開発者は、受取人のコールバックを無害だと思い込まず、悪意のある受取コントラクトを使って安全なNFT送金をテストしてください。approve関数
getApproved関数
他のアドレスがトークンを移転できるかを判断する際、アプリケーションは
setApprovalForAll関数
isApprovedForAll関数
ERC-721のイベント
コアERC-721インターフェースでは、
Transferイベント
Approvalイベント
ApprovalForAllイベント
任意のERC-721メタデータインターフェース
メタデータ拡張では、
そのERC-165インターフェースIDは
tokenURIの仕組み
最新のERC-721開発ガイドでは、オフチェーンメタデータは保存場所を管理する主体によって変更される可能性があると説明されています。
トークンの所有権があっても、外部画像やファイルが永久に利用できるとは限りません。任意のERC-721 Enumerableインターフェース
enumerable拡張を使うと、オンチェーンの照会によってアプリケーションがトークンIDを検出できます。そのERC-165インターフェースIDは
代わりに、多くのアプリケーションはオフチェーンで
ミントとバーン
コアERC-721インターフェースでは、公開ミント関数を必須としていません。ミントが自由参加、制限付き、スケジュール制、上限付き、永久停止のどれに該当するかは、各プロジェクトが決定します。規格では、公開バーン関数も必須ではありません。バーンでは、コントラクトの実装に従って有効な所有権記録からトークンが削除されます。誰がNFTをミントまたはバーンできるか、また管理者が他のアカウントのトークンに影響を与えられるかを確認してください。送金インターフェースに準拠しているからといって、トークン供給量が固定されているとは限りません。ERC-721インターフェースとERC-721実装の違い
インターフェースは、互換性に必要な外部動作を定義します。実装には、実際のストレージ、承認、送金、ミント、メタデータ、管理者ロジックが含まれます。同じERC-721インターフェースに対応する2つのコントラクトでも、内部設計は大きく異なる場合があります。一方の実装は不変で、もう一方はアップグレード可能なプロキシを通じて動作する場合があります。供給量が固定された実装もあれば、管理者が無制限にミントできる実装もあります。メタデータをオンチェーンに保存する実装もあれば、変更可能なサーバーを参照する実装もあります。インターフェースへの対応を完全なセキュリティ評価とみなさず、実装そのものを確認してください。ERC-721とERC-20の違い
ERC-20は代替可能な残高を表し、ERC-721は個別に識別されるトークンを表します。ERC-20のアカウントは、250単位のような分割可能な数量を保有できます。ERC-721のアカウントは、異なるトークンIDの保有数を管理します。ERC-721の
ERC-721とERC-1155の違い
ERC-721は、個別に識別される非代替性トークンを中心とした規格です。ERC-1155では、1つのコントラクトで代替可能、準代替可能、非代替性の資産を含む複数のトークンIDを管理できます。ERC-1155のアカウントは、1つのトークンIDを複数単位保有できます。ERC-721のトークンIDには1人の所有者が存在し、各アカウントの残高として数量を管理することはありません。最適な規格は、資産モデル、送金パターン、一括操作の必要性、アプリケーション要件によって異なります。ロイヤリティとERC-721インターフェース
コアERC-721インターフェースでは、クリエイターへのロイヤリティは定義されていません。別のロイヤリティインターフェースを使うと、推奨される支払先と支払額を伝えられます。ロイヤリティ情報があっても、すべての送金システムに支払いを自動的に強制できるわけではありません。ロイヤリティを掲げるコレクションは、その情報の計算方法や変更可能性を説明する必要があります。ERC-721のNFTに永久的または法的強制力のあるロイヤリティ権が含まれると思い込まないでください。ERC-721承認に関するセキュリティリスク
NFT保有者にとって、承認を悪用するフィッシングは特に重要なリスクの一つです。悪意のあるウェブサイトが、署名の内容をアカウント確認やコレクションへのアクセスと説明しながら、
安全でない送金のリスク
この問題が、コントラクトへの送金で
メタデータと真正性に関するリスク
誰でも、よく知られたコレクション名やシンボルを使ってERC-721コントラクトをデプロイできます。コレクションを識別するうえで最も重要な技術情報は、コントラクトアドレスです。メタデータには、誤解を招く名称、複製されたアートワーク、安全でない外部リンク、利用できないファイルが含まれる場合もあります。プロジェクトの管理者が管理するトークンURIは、後から異なるコンテンツを指すように変更される場合があります。オンチェーンの所有権だけでは、作成者の身元や知的財産権は独立して確認できません。信頼できる情報源を通じて、コレクションのアドレスとプロジェクト情報を確認してください。アップグレード可能なコントラクトのリスク
ERC-721実装は、アップグレード可能なプロキシの背後で動作する場合があります。権限を持つ管理者が、ユーザーによるNFT取得後に送金ルール、メタデータロジック、ミント権限、その他の動作を変更できる可能性があります。アップグレードでバグを修正できる場合がある一方、ガバナンスや鍵の侵害に関するリスクも生じます。アップグレード権限、タイムロック、マルチシグ管理、管理者ロールを確認してください。ERC-721インターフェースへの対応だけでは、実装に含まれるすべての特権関数は分かりません。開発者がERC-721を実装する方法
開発者は、強い理由もなく機密性の高い所有権ロジックを独自に書き直すのではなく、レビュー済みで積極的に保守されている実装を利用してください。最新のOpenZeppelin ERC-721 APIには、コア機能、メタデータ、enumerable、一時停止可能、バーン可能、ロイヤリティ、投票、受取人関連のコンポーネントが用意されています。
ミント権限は、コレクションで公開されている供給方針に従って制限してください。NFTをスマートコントラクトへ直接ミントできる場合、安全なミントの利用を検討してください。受取人のコールバックは、リエントランシーを引き起こす可能性がある外部呼び出しとして扱ってください。テストでは、所有権、承認、オペレーター権限、安全な受取人、悪意のある受取人、バーン、無効なトークンID、権限のない送金を確認してください。実装するすべての拡張について、インターフェース検出が正しい値を返すかもテストしてください。アプリケーションがERC-721対応を検出する方法
アプリケーションは、コアERC-721インターフェースIDを指定して
ERC-721の送金例
AliceがERC-721コントラクト内のトークンID 42を所有しているとします。コントラクトの
Aliceのウォレットは、Aliceのアドレス、受取コントラクト、トークンID 42を指定して
所有権を更新し、受取人の
受取人が正しいセレクターを返すと送金が完了し、
ERC-721インターフェースでよくある間違い
よくある間違いの一つは、コレクション名だけでNFTコントラクトを一意に識別できると思い込むことです。別の間違いは、
3つ目は、不明なスマートコントラクトへNFTを送る際に
よくある質問
ERC-721インターフェースとは何ですか?
ERC-721インターフェースは、非代替性トークンの所有権、承認、送金を追跡するための関数とイベントを標準化したものです。ERC-721インターフェースIDとは何ですか?
ERC-721コアインターフェースIDは
ERC-721コントラクトのbalanceOfは何を返しますか?
そのコントラクトの異なるNFTを、あるアドレスがいくつ所有しているかを返します。ownerOfは何をしますか?
有効なトークンIDの現在の所有者を返します。transferFromとsafeTransferFromの違いは何ですか?
onERC721Receivedとは何ですか?
安全な送金でNFTを受け取れることを確認するため、スマートコントラクトが実装するコールバックです。安全なNFT送金が失敗することはありますか?
はい。承認チェックに失敗した場合や、受取コントラクトが所定のコールバックセレクターを返さない場合は失敗します。approveは何をしますか?
特定のNFTを1つのアドレスが移転できるよう承認します。setApprovalForAllは何をしますか?
そのERC-721コントラクト内で、呼び出し元が所有するすべてのNFTをオペレーターが管理できるようにします。オペレーター承認は自動的に期限切れになりますか?
いいえ。標準的なコレクション全体の承認は、所有者が取り消すか、コントラクトが追加の独自ルールを適用するまで有効です。NFTを移転すると、そのトークン固有の承認は解除されますか?
はい。通常のERC-721実装では、送金時にそのトークンに関連付けられた承認が解除されます。ERC-721ではメタデータが必須ですか?
いいえ。メタデータインターフェースは任意ですが、ほとんどのNFTコレクションが実装しています。ERC-721メタデータインターフェースIDとは何ですか?
メタデータ拡張のインターフェースIDは
ERC-721 enumerableインターフェースIDとは何ですか?
enumerable拡張のインターフェースIDは
すべてのERC-721コントラクトはtotalSupplyに対応していますか?
いいえ。
ERC-721ではミント関数が必須ですか?
いいえ。コアインターフェースでは、ユーザーや管理者がNFTをどのようにミントするかは定義されていません。ERC-721ではバーン関数が必須ですか?
いいえ。バーンは必須のコア関数ではなく、実装に含まれる機能です。ERC-721はロイヤリティを強制しますか?
いいえ。ロイヤリティはコアERC-721インターフェースの対象外であり、別のロジックまたは規格が必要です。ERC-721のメタデータは変更できますか?
はい。実装がより強い不変性を保証していない限り、規格ではトークンURIの変更が認められています。ERC-721への準拠はNFTの真正性を証明しますか?
いいえ。誰でも互換性のあるコントラクトをデプロイできるため、ユーザーはコントラクトアドレスと発行者を個別に確認する必要があります。まとめ
ERC-721インターフェースは、Ethereum互換アプリケーションで非代替性トークンに使われる、共通の所有権、承認、送金、イベントのルールを提供します。コアインターフェースIDは
関連コンテンツ
WhatsMiner M30S++
Web3ドメイン
Web3プロジェクト
ホット
現在、市場で大きな注目を集めているトレンドの暗号資産
トップ取引高
取引高が最も多い暗号資産

