ERC-721は、イーサリアム上の非代替性トークン(NFT)に関する標準規格です。標準規格とは、公開された一連のルールのことです。非代替性(ノンファンジブル)とは、それぞれのトークンが他のトークンと区別されることを意味します。ERC-721はインターフェースを規定しており、これはスマートコントラクトが提供する関数とイベントの一覧です。スマートコントラクトとは、ブロックチェーン上に保存されたプログラムのことです。ERC-721において、トークンとはスマートコントラクトを通じて既存のブロックチェーン上で発行される単位のことを指します。
ERC-721は、イーサリアムコミュニティ向けの設計文書であるイーサリアム改善提案(EIP)として公開されています。この提案の番号は721であるため、ERC-721はEIP-721とも表記されます。ERCは、アプリケーションレベルの標準規格、つまりイーサリアム上のアプリケーションが従う標準規格(トークン規格など)のカテゴリーです。
ERC-721内のコードでは、そのインターフェースをERC721と名付けています。ERC-721トークンとは、ERC-721に準拠したコントラクトによって発行されるトークンのことです。
関数とは、コントラクトが提供し、ユーザーが呼び出せる名前付きの操作のことです。イベントとは、何かが変化した際にコントラクトがブロックチェーン上に記録する通知であり、これによってソフトウェアがその変化を追跡できるようになります。イベントを記録することを「発行する(emit)」と言います。
ブロックチェーンとは、順序立てて保持される取引の共有記録のことです。トランザクションとは、ユーザーがブロックチェーンに送信するリクエスト(トークンの移動リクエストなど)のことです。アドレスとは、ブロックチェーン上でユーザーまたはスマートコントラクトを識別する識別子のことです。
ERC-721標準規格は何を規定しているのか?
ERC-721標準規格はインターフェースを規定しています。つまり、コントラクトが提供しなければならない関数と、発行しなければならないイベントです。これにより、ソフトウェアはERC-721に準拠したコントラクトを同じ方法で呼び出すことができます。
ERC-721はまた、ERC-165によるインターフェース検出も必須としています。これは、コントラクトがどのインターフェースをサポートしているかを示すことができる標準規格です。
ERC-721には2つの任意の拡張機能が記載されています。メタデータ拡張は、コントラクトのトークンの名前やシンボル、各トークンIDへのリンクを返す関数を追加するもので、列挙拡張は、コントラクトが追跡するトークンを一覧表示する関数を追加するものです。
ERC-721は数あるNFT標準規格の1つであり、イーサリアム向けに作成されたものです。他のブロックチェーンや他の標準規格は、ERC-721とは異なる方法で動作する場合があります。
ERC-721に準拠したコントラクトは、コントラクトが各トークンに付与する番号であるトークンIDによってトークンを区別します。トークンを追跡するコントラクトのアドレスとトークンIDを組み合わせることで、1つのトークンが特定されます。ERC-721では、コントラクトが存在する限り、トークンIDは変わらないことが求められています。
ERC-721とERC-20:2つの標準規格の違いとは?
ERC-721とERC-20は、コントラクトが何を追跡するか、転送が何を指定するか、承認が何をカバーするかという点で異なります。ERC-20は代替性トークンの標準規格であり、これはトークンの単位が交換可能であること、つまりある単位が別の単位と同じであることを意味します。ERC-721は非代替性トークンの標準規格であり、コントラクトはトークンIDによってトークンを区別するため、2つのトークンを交換することは同等物同士の交換にはなりません。
- ERC-20コントラクトは各アドレスが保有する単位数を記録しますが、ERC-721コントラクトはどのアドレスが各トークンIDを管理しているかを記録します。
- ERC-20の転送はトークンの数量を指定しますが、ERC-721の転送はトークンIDを指定します。
- ERC-20の承認は別のアドレスが転送できる数量をカバーしますが、ERC-721の承認は1つのトークンID、または、オペレーターを指定する場合は同じコントラクト内でそのアドレスが管理するすべてのトークンをカバーします。オペレーターとは、トークンを管理するアドレスが、それらすべてを転送することを許可したアドレスのことです。
ERC-721が定義する関数とイベントとは?
この表は、ERC-721が定義する関数とイベントを、ERC-165によるインターフェース検出関数とあわせて名前順に列挙し、それぞれが何を行うかを示しています。
受取側のコントラクトを確認する関数はどれか?
safeTransferFrom関数は、トークンを移動させた後に受領確認を行います。受取先のアドレスがスマートコントラクトである場合、ERC-721コントラクトは受取側のコントラクトが提供するonERC721Receivedという名前の受領関数を呼び出します。受領関数はERC-721が定義する特定の応答を返し、これによって受取側のコントラクトが転送を受け入れることをERC-721コントラクトに知らせます。受取側のコントラクトがそれ以外の応答を返した場合、トランザクションは取り消されます。これをERC-721では「リバート」と呼びます。
transferFrom関数は受領関数を呼び出しません。ERC-721では、受取先のアドレスがトークンを受け取れるかどうかの確認は、呼び出し元、つまりその関数を呼び出すトランザクションを送信した側に委ねられています。受領関数を提供していないコントラクトに送られたトークンは、失われる可能性があります。
承認とオペレーターはどのように機能するのか?
承認とは、別のアドレスがトークンを転送できるようにする仕組みです。approve関数は1つのトークンIDに対して1つのアドレスを指定し、getApprovedはそのアドレスを返します。ERC-721では、トークンが転送されると承認されたアドレスは「なし」にリセットされると規定されています。
オペレーターとは、setApprovalForAllを通じて、別のアドレスが同じコントラクト内で管理するすべてのトークンを転送できるように許可されたアドレスのことです。ERC-721では、トークンを管理する各アドレスにつき複数のオペレーターを許可することがコントラクトに求められており、isApprovedForAllは、あるアドレスが別のアドレスのオペレーターであるかどうかを返します。
ERC-721の下では、転送はトークンを管理するアドレス、そのアドレスのオペレーター、またはそのトークンIDに対して承認されたアドレスのいずれかによってリクエストすることができます。
任意のメタデータ拡張は何を追加するのか?
ERC-721の任意のメタデータ拡張は、コントラクトにname、symbol、tokenURIという3つの関数を追加します。メタデータとはトークンを説明するデータのことで、これら3つの関数がそれを返します。
name関数はコントラクトが追跡するトークンの名前を返し、symbolはその略称を返します。
tokenURI関数は1つのトークンIDに対するURIを返します。URI(uniform resource identifierの略)とはリンクのことです。この拡張機能を実装していないコントラクトにはURIがありません。
ERC-721によれば、tokenURIが返すURIは、構造化データ用のテキスト形式であるJSONファイルを指す場合があります。このファイルには、名前、説明、画像のフィールドを含めることができます。
ERC-721では、コントラクトがあるトークンIDに対して返すURIを変更することが認められているため、同じトークンIDが後になって別のファイルを指すこともあり得ます。ERC-721は、URIが指すファイルがどこに保存されるかについては規定していません。
ERC-721が各コントラクトに委ねている事項とは?
2026年10月時点で、ERC-721はトークンの内容、トークンに結び付く権利、トークンのファイルの保存場所、トークンの作成・破棄の方法、トークンの法的地位のいずれも定義していません。非代替性トークン(NFT)の用語集エントリでは、トークンの記録、つまりコントラクトが各トークンについて保持する情報から何が除外されているかを説明しています。
ERC-721に準拠したコントラクトであっても、動作が異なる場合があります。ERC-721は転送が失敗しなければならないケースを列挙しており、それ以外のケース(例えば転送が一時停止されている間など)でコントラクトが転送を取り消すことを認めています。そのため、コントラクトはERC-721が列挙していない理由で転送を拒否することがあります。
2026年1月5日











