ERC-721 — это стандарт невзаимозаменяемых токенов (NFT) в сети Ethereum. Стандарт — это опубликованный набор правил. Невзаимозаменяемость означает, что каждый токен отличается от остальных. ERC-721 задаёт интерфейс — перечень функций и событий, которые предоставляет смарт-контракт. Смарт-контракт — это программа, хранящаяся в блокчейне. В терминах ERC-721 токен — это единица, выпущенная в уже существующем блокчейне с помощью смарт-контракта.
ERC-721 опубликован как Ethereum Improvement Proposal (EIP) — документ с описанием архитектурного решения для сообщества Ethereum. Номер предложения — 721, поэтому ERC-721 также обозначают как EIP-721. ERC — это категория предложений для стандартов уровня приложений, то есть стандартов, которым следуют приложения в Ethereum, например стандарты токенов.
В коде ERC-721 его интерфейс называется ERC721. Токен ERC-721 — это токен, выпущенный контрактом, который следует ERC-721.
Функция — это именованная операция, которую предоставляет контракт и которую может вызвать пользователь. Событие — это уведомление, которое контракт записывает в блокчейн при изменении чего-либо, чтобы программное обеспечение могло отслеживать это изменение. Зафиксировать событие — значит записать его.
Блокчейн — это общий упорядоченный реестр транзакций. Транзакция — это запрос, который пользователь отправляет в блокчейн, например запрос на перемещение токена. Адрес — это идентификатор пользователя или смарт-контракта в блокчейне.
Что определяет стандарт ERC-721?
Стандарт ERC-721 задаёт интерфейс: функции, которые должен предоставлять контракт, и события, которые он должен фиксировать. Благодаря этому программное обеспечение может одинаковым образом обращаться к контрактам, следующим ERC-721.
ERC-721 также требует определения поддерживаемых интерфейсов через ERC-165 — стандарт, который позволяет контракту сообщать, какие интерфейсы он поддерживает.
ERC-721 описывает два необязательных расширения. Расширение метаданных добавляет функции, которые возвращают название и символ токенов контракта, а также ссылку для каждого ID токена, а расширение перечисления добавляет функции, которые перечисляют токены, отслеживаемые контрактом.
ERC-721 — это один из стандартов NFT, разработанный для Ethereum. Другие блокчейны и другие стандарты могут работать иначе, чем ERC-721.
Контракт, следующий ERC-721, различает свои токены по ID токена — числу, которое контракт присваивает каждому токену. Адрес контракта, отслеживающего токены, вместе с ID токена идентифицирует один токен, и ERC-721 требует, чтобы ID токена оставался неизменным на протяжении всего существования контракта.
ERC-721 и ERC-20: чем отличаются эти два стандарта?
ERC-721 и ERC-20 различаются тем, что отслеживает контракт, что обозначает перевод и что охватывает разрешение (approval). ERC-20 — это стандарт для взаимозаменяемых токенов, то есть токенов, единицы которых равноценны, так что одна единица равна другой. ERC-721 — это стандарт для невзаимозаменяемых токенов, которые контракт различает по ID токена, поэтому обмен двух таких токенов не является равноценным обменом.
- Контракт ERC-20 фиксирует, сколько единиц токена находится в распоряжении каждого адреса, тогда как контракт ERC-721 фиксирует, какой адрес контролирует каждый ID токена.
- Перевод ERC-20 указывает количество токенов, тогда как перевод ERC-721 указывает ID токена.
- Разрешение ERC-20 охватывает сумму, которую может перевести другой адрес, тогда как разрешение ERC-721 охватывает либо один ID токена, либо, если указан оператор, все токены, которые контролирует адрес в рамках того же контракта. Оператор — это адрес, которому адрес, контролирующий токены, разрешил переводить все эти токены.
Какие функции и события определяет ERC-721?
В этой таблице перечислены по названию функции и события, которые определяет ERC-721, а также функция определения интерфейса из ERC-165, и описано, что делает каждая из них.
Какая функция проверяет принимающий контракт?
Функция safeTransferFrom выполняет проверку получателя после перемещения токена. Если принимающий адрес является смарт-контрактом, контракт ERC-721 вызывает у него функцию с названием onERC721Received — функцию-получатель. Принимающий контракт предоставляет эту функцию, и она возвращает определённый ответ, заданный ERC-721, который сигнализирует контракту ERC-721, что принимающий контракт принимает перевод. Если принимающий контракт возвращает что-либо другое, транзакция отменяется — в терминах ERC-721 это называется откатом (revert).
Функция transferFrom не вызывает функцию-получатель. ERC-721 оставляет проверку того, способен ли принимающий адрес получать токены, на усмотрение вызывающей стороны, то есть того, кто отправляет транзакцию с вызовом этой функции. Токен, отправленный на контракт, который не предоставляет функцию-получатель, может быть утерян.
Как работают разрешения и операторы?
Разрешение позволяет другому адресу перевести токен. Функция approve указывает один адрес для одного ID токена, а getApproved возвращает этот адрес. Согласно ERC-721, одобренный адрес сбрасывается при переводе токена.
Оператор — это адрес, которому через setApprovalForAll разрешено переводить все токены, контролируемые другим адресом в рамках того же контракта. ERC-721 требует, чтобы контракт допускал более одного оператора для каждого адреса, контролирующего токены, а isApprovedForAll возвращает, является ли адрес оператором для другого адреса.
Согласно ERC-721, запрос на перевод может исходить от адреса, контролирующего токен, от оператора этого адреса или от адреса, одобренного для данного ID токена.
Что добавляет необязательное расширение метаданных?
Необязательное расширение метаданных ERC-721 добавляет к контракту три функции: name, symbol и tokenURI. Метаданные — это данные, описывающие токены, и именно их возвращают эти три функции.
Функция name возвращает название токенов, которые отслеживает контракт, а symbol возвращает их сокращённое название.
Функция tokenURI возвращает URI для одного ID токена. URI, сокращение от uniform resource identifier (унифицированный идентификатор ресурса), — это ссылка. У контракта, не реализующего это расширение, URI отсутствует.
ERC-721 указывает, что URI, возвращаемый функцией tokenURI, может указывать на JSON-файл — текстовый формат для структурированных данных. Файл может содержать поля name (название), description (описание) и image (изображение).
ERC-721 позволяет контракту изменять URI, возвращаемый для ID токена, поэтому один и тот же ID токена может впоследствии вести к другому файлу. ERC-721 не определяет, где хранится файл, на который указывает URI.
Что ERC-721 оставляет на усмотрение каждого контракта?
По состоянию на октябрь 2026 года ERC-721 не определяет содержание токена, какие-либо права, связанные с токеном, место хранения файлов токена, способ создания или уничтожения токенов, а также юридический статус токена. Статья глоссария «Невзаимозаменяемый токен (NFT)» объясняет, чего не хватает в записи о токене — то есть в информации, которую контракт хранит о каждом токене.
Контракты, следующие ERC-721, всё же могут различаться по поведению. ERC-721 перечисляет случаи, в которых перевод обязательно должен завершиться неудачей, и допускает, что контракт может отменить перевод в других случаях, например, пока переводы приостановлены. Поэтому контракт может отказать в переводе по причинам, не перечисленным в ERC-721.
5 января 2026 г.









