Что такое интерфейс ERC-721?
Интерфейс ERC-721 — это стандартизированный набор функций и событий смарт-контракта, используемых для представления и передачи невзаимозаменяемых токенов в Ethereum и совместимых блокчейн-сетях.Невзаимозаменяемый токен, или NFT, представляет собой токен с уникальным идентификатором, а не взаимозаменяемое количество одинаковых единиц.В официальной спецификации ERC-721 определено, как кошельки, приложения, смарт-контракты и инструменты блокчейна могут проверять владение NFT и выполнять стандартные переводы.
Интерфейс не определяет, что представляет собой NFT, какова его стоимость и подлинно ли связанное с ним содержимое.Он задает общий технический язык, который разные криптоприложения могут использовать при взаимодействии с контрактами NFT.Стандарт ERC-721 получил статус Final в процессе рассмотрения предложений по улучшению Ethereum и по-прежнему остается одним из основных стандартов уникальных активов в блокчейне.ERC-721 можно использовать для цифровых коллекционных предметов, игровых объектов, подтверждений членства, виртуальной земли, билетов на мероприятия, доменоподобных активов, финансовых позиций и токенизированных записей.Зачем нужен интерфейс?
Интерфейс смарт-контракта описывает внешние функции и события, которые совместимое ПО ожидает от контракта.Без общего интерфейса каждый проект NFT мог бы использовать собственные названия функций и правила перевода.Тогда для каждой коллекции кошелькам и децентрализованным приложениям потребовался бы отдельный код.Интерфейс ERC-721 позволяет программам вызывать привычные функции, например
Что делает токен ERC-721 невзаимозаменяемым?
У каждого токена ERC-721 есть уникальное целое число без знака, называемое идентификатором токена.Токен полностью определяется сочетанием блокчейн-сети, адреса контракта и идентификатора токена.Токен с идентификатором 100 в одном контракте не связан с токеном с идентификатором 100 в другом.Стандарт не требует, чтобы идентификаторы начинались с нуля, шли по порядку или следовали предсказуемой схеме.Приложениям следует считать каждый идентификатор непрозрачным идентификатором, а не пытаться угадать, какие идентификаторы существуют.Согласно базовой модели владения ERC-721 каждый действительный идентификатор токена одновременно принадлежит одному владельцу.NFT можно передать только целиком, а для долевого владения нужен отдельный контракт или структура токена, не предусмотренные базовым интерфейсом.Идентификатор основного интерфейса ERC-721
Основной интерфейс ERC-721 идентифицируется через ERC-165 значением
Совместимый контракт должен возвращать
В стандарте обнаружения интерфейсов ERC-165 указано, что идентификатор интерфейса рассчитывается посредством XOR селекторов функций, входящих в интерфейс.
ERC-165 позволяет приложению узнать у контракта, какие стандартизированные интерфейсы он, по его утверждению, поддерживает, прежде чем взаимодействовать с ним.Положительный ответ полезен для проверки совместимости, но сам по себе не доказывает корректность реализации каждой функции.Для работы с ценными активами приложениям также могут понадобиться проверка кода, тестирование и симуляция транзакций.Основные функции ERC-721
Обязательный интерфейс ERC-721 включает запросы о владении, функции перевода и управления разрешениями.К основным функциям относятся
Функция balanceOf
Функция
Функция ownerOf
Функция
Функция transferFrom
Функция
Адрес
NFT, отправленный через
Функции safeTransferFrom
В ERC-721 определены две перегруженные версии
Если получателем является смарт-контракт, в ходе перевода вызывается функция
Что такое IERC721Receiver?
Обязательная функция этого интерфейса —
Для подтверждения успешного приема контракт возвращает селектор функции, обычно представляемый значением
В актуальной документации по реализации ERC-721 описаны интерфейс получателя и базовый вспомогательный контракт для контрактов, которым нужно принимать безопасные переводы.
Получателю следует проверять, какой контракт NFT вызвал его, прежде чем использовать callback для обновления важного учета.Риск callback-функции получателя ERC-721
Безопасный перевод смарт-контракту приводит к внешнему вызову этого получателя.Получатель может выполнить дополнительный код до завершения исходной транзакции.Если отправляющее приложение не успело обновить внутреннее состояние, возникает потенциальная возможность повторного входа.Вредоносный получатель может попытаться вызвать другую функцию исходного контракта во время callback.В рекомендациях Solidity по безопасности смарт-контрактов советуют по возможности выполнять проверки и важные изменения состояния до внешнего взаимодействия.
Разработчикам следует тестировать безопасные переводы NFT с вредоносными контрактами-получателями, а не считать callback безвредным.Функция approve
Функция
Вызов
Функция getApproved
Функция
Чтобы определить, может ли другой адрес перевести токен, приложению следует также проверить
Функция setApprovalForAll
Функция
Функция isApprovedForAll
Функция
События ERC-721
В основном интерфейсе ERC-721 определены события
Событие Transfer
Событие
Событие Approval
Событие
Событие ApprovalForAll
Событие
Необязательный интерфейс метаданных ERC-721
Расширение метаданных добавляет функции
Идентификатор интерфейса ERC-165 —
Функция
Функция
Функция
Как работает tokenURI
Функция
В актуальном руководстве по разработке для ERC-721 отмечено, что сторона, контролирующая место хранения внешних метаданных, может изменить их.
Право собственности на токен автоматически не гарантирует постоянную доступность внешнего изображения или файла.Необязательный интерфейс перечисления ERC-721
Расширение перечисления позволяет приложениям находить идентификаторы токенов с помощью запросов к блокчейну.Идентификатор интерфейса ERC-165 —
Расширение добавляет функции
Функция
Вместо этого многие приложения восстанавливают данные о владении NFT по событиям
Выпуск и сжигание
Основной интерфейс ERC-721 не требует наличия публичной функции выпуска.Каждый проект самостоятельно решает, будет ли выпуск открытым, ограниченным, запланированным, лимитированным или навсегда отключенным.Стандарт также не требует наличия публичной функции сжигания.Сжигание удаляет токен из действующих записей о владении в соответствии с реализацией контракта.Пользователям следует выяснить, кто может выпускать или сжигать NFT и может ли администратор влиять на токены, принадлежащие другим аккаунтам.Соответствие интерфейсу переводов не доказывает, что предложение токенов фиксировано.Интерфейс ERC-721 и его реализация
Интерфейс определяет внешнее поведение, необходимое для совместимости.Реализация включает фактическую логику хранения данных, авторизации, переводов, выпуска, метаданных и администрирования.Два контракта могут поддерживать один и тот же интерфейс ERC-721, но использовать совершенно разные внутренние архитектуры.Одна реализация может быть неизменяемой, а другая — работать через обновляемый прокси.В одном контракте может быть фиксированное предложение, а в другом администратор может выпускать токены без ограничения.В одном случае метаданные могут храниться в блокчейне, а в другом — находиться на сервере и меняться со временем.Пользователям следует проверять реализацию, а не считать поддержку интерфейса полной оценкой безопасности.ERC-721 и ERC-20
ERC-20 представляет взаимозаменяемые балансы, а ERC-721 — отдельные токены с собственными идентификаторами.На аккаунте ERC-20 может храниться делимое количество, например 250 единиц.Аккаунт ERC-721 владеет определенным количеством отдельных токенов с разными идентификаторами.Функция
ERC-721 и ERC-1155
ERC-721 предназначен для индивидуально идентифицируемых невзаимозаменяемых токенов.ERC-1155 позволяет управлять в рамках одного контракта множеством идентификаторов токенов, включая взаимозаменяемые, полу взаимозаменяемые и невзаимозаменяемые активы.На аккаунте ERC-1155 может храниться несколько единиц с одним идентификатором токена.У токена ERC-721 один владелец, и баланс аккаунта не отражает количество единиц с одним идентификатором.Выбор подходящего стандарта зависит от модели активов, особенностей переводов, потребности в пакетных операциях и требований приложения.Роялти и интерфейс ERC-721
В основном интерфейсе ERC-721 не определены роялти для создателей.Отдельный интерфейс роялти может указывать рекомендуемого получателя платежа и его размер.Информация о роялти автоматически не обязывает все системы перевода выполнять платеж.Коллекции, заявляющие о наличии роялти, должны объяснять, как рассчитывается их размер и может ли он меняться.Пользователям не следует считать, что NFT ERC-721 дает постоянное или юридически защищенное право на роялти.Риски безопасности разрешений ERC-721
Фишинг с помощью запросов на предоставление разрешений — один из наиболее серьезных рисков для владельцев NFT.Вредоносный сайт может запросить
Риск небезопасного перевода
Функция
Именно поэтому при переводе NFT контрактам рекомендуется использовать
Риски метаданных и подлинности
Любой может развернуть контракт ERC-721 с привычным названием или символом коллекции.Адрес контракта — важнейший технический идентификатор коллекции.Метаданные также могут содержать вводящие в заблуждение названия, скопированные изображения, опасные внешние ссылки или недоступные файлы.URI токена, контролируемый администратором проекта, позднее может указывать на другое содержимое.Владение в блокчейне само по себе не подтверждает личность создателя или права на интеллектуальную собственность.Пользователям следует проверять адрес коллекции и сведения о проекте по авторитетным источникам.Риски обновляемого контракта
Реализация ERC-721 может работать через обновляемый прокси.Уполномоченный администратор может получить возможность изменять правила перевода, логику метаданных, права на выпуск или другие функции после того, как пользователи приобретут NFT.Обновления могут исправлять ошибки, но также создавать риски, связанные с управлением и компрометацией ключей.Пользователям следует проверять права на обновление, временные задержки, механизмы мультиподписи и роли администраторов.Поддержка интерфейса ERC-721 не раскрывает все привилегированные функции реализации.Как разработчикам реализовать ERC-721
Разработчикам следует использовать проверенную и активно поддерживаемую реализацию, а не переписывать критически важную логику владения без веской причины.В актуальном API OpenZeppelin ERC-721 представлены основные компоненты, а также компоненты метаданных, перечисления, приостановки, сжигания, роялти, голосования и приема токенов.
Права на выпуск следует ограничить в соответствии с документированной политикой предложения коллекции.Если NFT могут выпускаться непосредственно на смарт-контракты, следует рассмотреть безопасный выпуск.Callback-функции получателя необходимо считать внешними вызовами, которые могут привести к повторному входу.Тесты должны охватывать владение, разрешения, полномочия операторов, безопасных и вредоносных получателей, сжигание, недопустимые идентификаторы токенов и неавторизованные переводы.Разработчикам также следует проверять, что обнаружение интерфейсов возвращает правильные значения для каждого реализованного расширения.Как приложениям определить поддержку ERC-721
Приложение может вызвать функцию
Возвращаемое значение
Пример перевода ERC-721
Предположим, Алис владеет токеном с идентификатором 42 в контракте ERC-721.Функция
Кошелек Алисы вызывает
Он обновляет сведения о владении и вызывает функцию
Если получатель возвращает правильный селектор, перевод завершается и генерируется событие
Распространенные ошибки при работе с интерфейсом ERC-721
Одна из распространенных ошибок — считать, что название коллекции однозначно идентифицирует контракт NFT.Другая — интерпретировать
Третья — использовать
FAQ
Что такое интерфейс ERC-721?
Интерфейс ERC-721 — это стандартизированный набор функций и событий для отслеживания владения, разрешений и переводов невзаимозаменяемых токенов.Каков идентификатор интерфейса ERC-721?
Идентификатор основного интерфейса ERC-721 —
Что возвращает функция balanceOf в контракте ERC-721?
Она возвращает количество отдельных NFT из этого контракта, принадлежащих адресу.Для чего нужна функция ownerOf?
Она возвращает текущего владельца действительного идентификатора токена.Чем отличаются transferFrom и safeTransferFrom?
Что такое onERC721Received?
Это callback-функция, которую реализует смарт-контракт, чтобы подтвердить возможность принимать NFT посредством безопасного перевода.Может ли безопасный перевод NFT завершиться ошибкой?
Да, он завершится ошибкой, если не пройдена проверка полномочий или контракт-получатель не вернул ожидаемый селектор callback-функции.Что делает функция approve?
Она разрешает одному адресу переводить конкретный NFT.Что делает функция setApprovalForAll?
Она предоставляет оператору полномочия в отношении всех NFT, которыми вызывающий владеет в рамках данного контракта ERC-721.Истекает ли разрешение оператора автоматически?
Нет, стандартное разрешение на всю коллекцию остается активным, пока владелец его не отзовет или контракт не применит дополнительные пользовательские правила.Сбрасывается ли индивидуальное разрешение при переводе NFT?
Да, при обычной реализации ERC-721 разрешение, связанное с этим токеном, сбрасывается во время перевода.Требуются ли метаданные по стандарту ERC-721?
Нет, интерфейс метаданных необязателен, хотя его реализует большинство коллекций NFT.Каков идентификатор интерфейса метаданных ERC-721?
Идентификатор расширения метаданных —
Каков идентификатор интерфейса перечисления ERC-721?
Идентификатор расширения перечисления —
Поддерживает ли каждый контракт ERC-721 функцию totalSupply?
Нет, функция
Требует ли ERC-721 наличия функции выпуска?
Нет, основной интерфейс не определяет, как пользователи или администраторы выпускают NFT.Требует ли ERC-721 наличия функции сжигания?
Нет, сжигание — это функция реализации, а не обязательная базовая функция.Обеспечивает ли ERC-721 выплату роялти?
Нет, роялти не входят в основной интерфейс ERC-721 и требуют отдельной логики или стандартов.Могут ли метаданные ERC-721 изменяться?
Да, стандарт допускает изменяемый URI токена, если реализация не предоставляет более строгих гарантий неизменности.Доказывает ли соответствие ERC-721 подлинность NFT?
Нет, совместимый контракт может развернуть любой желающий, поэтому пользователям необходимо самостоятельно проверить адрес контракта и эмитента.Заключение
Интерфейс ERC-721 устанавливает общие правила владения, разрешений, переводов и событий, применяемые к невзаимозаменяемым токенам в приложениях, совместимых с Ethereum.Его идентификатор —
Вам также может быть интересно
ZK-Rollup
ZK-Rollup-as-a-Service
zk-SNARK
В тренде
Трендовые криптовалюты, которые в настоящее время привлекают значительное внимание рынка
ТОП по объему
Криптовалюты с наибольшим объемом торгов
Недавно добавленные
Криптовалюты недавно внесенные в листинг и доступные для торговли

