ERC-721: стандарт Ethereum для невзаимозаменяемых токенов

ERC-721: стандарт Ethereum для невзаимозаменяемых токенов

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, и описано, что делает каждая из них.

Название

Тип

Что делает

balanceOf

функция

Возвращает, сколько токенов контролирует адрес.

ownerOf

функция

Возвращает адрес, который контролирует ID токена.

transferFrom

функция

Перемещает ID токена с одного адреса на другой.

safeTransferFrom

функция

Перемещает ID токена с одного адреса на другой и дополнительно выполняет проверку получателя, если принимающий адрес является смарт-контрактом.

approve

функция

Позволяет одному указанному адресу перевести один ID токена.

getApproved

функция

Возвращает адрес, которому разрешено переводить один ID токена.

setApprovalForAll

функция

Позволяет адресу включить или отключить оператора для всех своих токенов в рамках того же контракта.

isApprovedForAll

функция

Возвращает, является ли один адрес оператором для другого адреса.

supportsInterface

функция из ERC-165

Возвращает, поддерживает ли контракт указанный интерфейс.

Transfer

событие

Сообщает, что адрес, контролирующий токен, изменился.

Approval

событие

Сообщает, что адрес, одобренный для ID токена, был изменён или подтверждён повторно.

ApprovalForAll

событие

Сообщает, что оператор был включён или отключён.

Какая функция проверяет принимающий контракт?

Функция 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 г.

Новости GoMining

Вам может быть интересно: