Owlio
RU
← Блог
ИнструкцияДля новичка

Как проверить, кто держит NFT: ERC-721 и ERC-1155

Картинка NFT и число токенов коллекции не говорят, кто держит конкретный токен. Выберите запрос чтения под его стандарт.

Для существующего токена ERC-721 вызовите ownerOf(tokenId) у нужного контракта коллекции: он вернёт адрес текущего держателя по записи контракта. Для ERC-1155 вызовите balanceOf(account, id), чтобы узнать число единиц с этим ID на адресе. Это разные вопросы: единицы одного типа ERC-1155 могут находиться на нескольких адресах.

Начните с сети, полного адреса контракта коллекции и ID токена. Держите эти три идентификатора вместе при проверке в знакомом обозревателе блокчейна или средстве чтения контрактов. Одинаковой картинки, названия коллекции или общего числа NFT недостаточно, чтобы определить конкретный токен на адресе.

Эта инструкция помогает проверить публичные записи о токенах. Она не устанавливает личность человека за адресом, подлинность или цену произведения и ваши права в сервисе хранения. Переводить активы или подключать кошелёк для проверки не требуется.

Выберите запрос под стандарт токена

Интерфейс ERC-721 позволяет получить и число токенов на адресе, и держателя отдельного токена. Стандартный интерфейс ERC-1155 требует одновременно адрес и ID типа токена.

Стандарт и запрос Что передать Что означает результат
ERC-721 ownerOf(tokenId) Один ID токена Адрес держателя существующего токена
ERC-721 balanceOf(account) Один адрес Число NFT этого контракта на адресе
ERC-1155 balanceOf(account, id) Адрес и ID типа токена Число единиц с этим ID на адресе

Допустим, в условной коллекции ERC-721 есть токены с ID 42 и 43. На адресе A находится 42, на адресе B находится 43. На каждом адресе счётчик показывает 1. По этим числам нельзя понять, где находится 42; запрос с конкретным ID это покажет.

Теперь возьмём другой условный контракт ERC-1155. На адресе A находятся 3 единицы с ID 42, на адресе B находятся 2. В один и тот же момент оба баланса могут быть положительными. Назвать A единственным владельцем ID 42 означало бы проигнорировать единицы на адресе B. Примеры поясняют запросы, а не приводят результаты проверки реальной коллекции.

Установите коллекцию и ID, прежде чем доверять совпадению

ID токена относится к конкретному контракту. ID 42 в одной коллекции не обозначает ID 42 в другой. Правила идентификаторов ERC-721 описывают пару «контракт и ID» в определённой сети; не предполагайте, что номера обязательно идут подряд.

Найдите официальные сведения о развёртывании коллекции через доверенный источник или используйте известную запись транзакции, чтобы подтвердить сеть и полный адрес контракта. Поддельный контракт может копировать знакомые название и изображение. Ответ привычной функции у такой копии не превращает её в нужную коллекцию.

Возьмите ID из сведений о предмете, не угадывайте его по названию. Сохраните значение точно. Если один интерфейс показывает шестнадцатеричный ID, а другой десятичный, до сравнения убедитесь, что они обозначают одно целое число. Адрес контракта указывает коллекцию, а адрес аккаунта указывает проверяемого держателя. Разницу объясняет инструкция об адресе кошелька и контракте токена.

Если предмет появился неожиданно, прочитайте инструкцию по безопасности спам-NFT, прежде чем открывать ссылки из его описания. Публичные записи можно изучить через уже знакомый вам источник, не переходя по ссылке на получение награды.

Выполните запрос чтения и сохраните результат

Ниже описана процедура проверки публичных записей. Для этой статьи её не проверяли на реальном кошельке. Первичная документация методов проверена 24 октября 2026 года.

  1. Запишите все идентификаторы. Укажите сеть, контракт коллекции и точный ID токена. Если проверяете конкретный кошелёк, добавьте его адрес.
  2. Подтвердите стандарт и выберите публичный метод чтения. Используйте сведения о контракте и верифицированный интерфейс доверенного обозревателя. Названия разделов могут различаться. Для ERC-721 нужен ownerOf с ID; для ERC-1155 нужен balanceOf с адресом и ID. Отсутствующий или неподдерживаемый интерфейс требует разобраться в причине, а не предполагать другой стандарт.
  3. Прочитайте текущее состояние и отметьте момент проверки. Сохраните полученный адрес или число единиц и, если доступен, номер блока. По возможности сравнивайте запросы на одном блоке: между двумя чтениями последнего состояния может произойти перевод.
  4. Не приписывайте ответу лишнего смысла. Полностью сравните адрес из ERC-721 с тем, который собирались проверить. Для ERC-1155 положительное число подтверждает единицы на этом адресе, а корректный нулевой ответ означает их отсутствие на нём в данный момент. Ни один из ответов не перечисляет всех остальных держателей.
  5. Помечайте неудачные и недоступные запросы как неизвестный результат. Сохраните ошибку или отметку о недоступности. Проверьте ID, контракт, сеть и средство чтения, прежде чем считать токен отсутствующим. Ошибка запроса не равна нулевому балансу.

Согласно справочнику OpenZeppelin ERC721, для публичного метода ownerOf токен должен существовать. Поэтому несуществующий или сожжённый ID может вызвать ошибку вместо полезного адреса держателя. Одна эта ошибка не объясняет, опечатались ли вы в ID, выбрали другой контракт или запросили недействительный токен.

Не путайте эту публичную функцию с внутренней вспомогательной функцией, имя которой начинается с подчёркивания. Вы проверяете документированный публичный интерфейс. Для чтения не нужны подпись, разрешение или фраза восстановления. Если сайт требует их только ради показа держателя, прекратите эту процедуру.

Если держатель по записи является контрактом

NFT может находиться на адресе контракта. Поэтому запрос держателя способен вернуть адрес хранилища, эскроу, системы стейкинга или другого сервиса вместо вашего кошелька, которым вы подписываете операции. Сам по себе этот факт не определяет, кому принадлежат экономические права и можно ли вернуть предмет.

Если вы осознанно внесли NFT в сервис, проверьте официальные записи сервиса и известную транзакцию внесения. Свяжите права своего аккаунта с точными коллекцией и ID. Не переводите и не выводите активы только ради того, чтобы галерея кошелька показывала ожидаемую картинку.

Для позиции ликвидности проверка держателя показывает лишь адрес, на котором находится NFT. Инструкция по NFT Uniswap v3 разбирает отдельную задачу: проверку активов и комиссий базовой позиции. Один адрес держателя NFT не сообщает ни одну из этих сумм.

Завершите проверку записью о токене, а не миниатюрой

Справочник OpenZeppelin ERC1155 описывает результат как число единиц определённого типа на адресе. Храните это количество вместе с адресом и ID. Не заменяйте его отметкой об одном владельце по образцу ERC-721 и не делите на степень десяти из постороннего ERC-20.

Запись полна, когда содержит сеть, контракт, ID токена, стандарт, полученного держателя или число единиц на адресе, а также блок или время наблюдения. Если держатель является контрактом сервиса, добавьте пояснение о хранении. Пока существенное поле не выяснено, считайте владение неподтверждённым.

Галерея удобна для просмотра, а такая запись отвечает на более узкий вопрос: что выбранный контракт сообщает о конкретном токене. Она не подтверждает подлинность коллекции, не даёт разрешения на перевод, не устанавливает личность человека и не рассчитывает цену продажи.

Частые вопросы

Доказывает ли баланс ERC-721, равный 1, что именно этот NFT находится в кошельке?

Нет. balanceOf считает NFT этого контракта на адресе. Чтобы узнать текущего держателя конкретного токена по записи контракта, вызовите ownerOf с его ID. Сеть и контракт коллекции должны совпадать.

Могут ли несколько кошельков держать ERC-1155 с одним ID?

Да. ID ERC-1155 может обозначать несколько единиц. balanceOf принимает адрес и ID и возвращает число единиц этого типа на адресе. Положительный результат не доказывает, что других держателей нет.

Нужно ли подключать кошелёк или подписывать запрос?

Для этих публичных запросов чтения не нужны подпись кошелька, разрешение или фраза восстановления. Результат показывает записанные в контракте токены, но не личность владельца адреса и не отдельные права через сервис хранения.