Три похожих разрешения меняют разную область
| Стандарт и запись | Область | Проверка |
|---|---|---|
| ERC-721 getApproved(tokenId) | Один существующий token ID | Какой адрес сейчас одобрен для этого NFT |
| ERC-721 isApprovedForAll(owner, operator) | Все ERC-721 владельца в одном contract | true или false для точной пары owner–operator |
| ERC-1155 isApprovedForAll(account, operator) | Все token IDs и amounts аккаунта в одном contract | true или false для точной пары account–operator |
| ERC-20 allowance(owner, spender) | Количество fungible-токена | Отдельная модель; не переносить на NFT |
- Стандарт и запись
- ERC-721 getApproved(tokenId)
- Область
- Один существующий token ID
- Проверка
- Какой адрес сейчас одобрен для этого NFT
- Стандарт и запись
- ERC-721 isApprovedForAll(owner, operator)
- Область
- Все ERC-721 владельца в одном contract
- Проверка
- true или false для точной пары owner–operator
- Стандарт и запись
- ERC-1155 isApprovedForAll(account, operator)
- Область
- Все token IDs и amounts аккаунта в одном contract
- Проверка
- true или false для точной пары account–operator
- Стандарт и запись
- ERC-20 allowance(owner, spender)
- Область
- Количество fungible-токена
- Проверка
- Отдельная модель; не переносить на NFT
В ERC-721 `approve` назначает адрес для конкретного token ID, а `setApprovalForAll` включает или выключает оператора для всех активов владельца в этом контракте. ERC-1155 использует operator-for-all для набора token IDs одного контракта. Здесь нет числового ERC-20 allowance: слово unlimited в интерфейсе обычно описывает ширину коллекции, а не лимит монет. ERC-20 allowance проверяется отдельным процессом.
Инвентаризация начинается с contract, owner и operator
Соберите воспроизводимую карточку approval
- 1Зафиксируйте сеть
Один и тот же адрес существует в нескольких EVM-сетях. Сохраните chain ID, explorer и block number чтения.
- 2Проверьте contract коллекции
Не доверяйте названию или картинке. Получите collection contract из доверенного источника и проверьте код/стандарт.
- 3Укажите owner
Читайте состояние для адреса, который действительно владеет NFT. Кошелёк, сейф и кастодиальный аккаунт — разные границы.
- 4Перечислите operators
Для каждой найденной пары сохраните operator address, источник обнаружения, текущее значение и связанные события как подсказку.
- 5Для ERC-721 проверьте token IDs
Отдельно вызовите getApproved для важных NFT. Нулевой operator-for-all не исключает approval на один token ID.
Список событий помогает найти кандидатов, но финальное право читают из текущего состояния. Старое событие `ApprovalForAll(true)` могло быть отменено позже; событие отмены мог пропустить индексатор. И наоборот, отсутствие строки в сервисе не доказывает `false`. Для ERC-721 перевод token ID сбрасывает его single-token approval по стандарту, но не снимает operator-for-all владельца для остальных NFT.
Отдельно проверяйте метаданные и права NFT: они отвечают на файл и внешние права. Operator approval отвечает на право вызвать transfer в контракте. Изображение, авторство файла и владение токеном не объясняют, какие operators сейчас разрешены.
Отзывайте только точную запись и проверяйте результат
| Наблюдение | Действие | Критерий завершения |
|---|---|---|
| ERC-721 getApproved вернул operator | Вызвать approve на zero address для этого token ID через доверенный путь | getApproved того же token ID возвращает zero address |
| ERC-721 isApprovedForAll=true | Вызвать setApprovalForAll(operator, false) | isApprovedForAll для той же пары возвращает false |
| ERC-1155 isApprovedForAll=true | Вызвать setApprovalForAll(operator, false) у exact contract | Повторное чтение той же пары возвращает false |
| Operator неизвестен, но нужен маркетплейсу | Проверить официальный contract и текущую необходимость | Есть документированная причина сохранить либо approval отозван |
| Уже был несанкционированный transfer | Сохранить receipts/events, прекратить новые подписи и проверить ключи | Revoke закрывает только будущий путь, не возвращает NFT |
- Наблюдение
- ERC-721 getApproved вернул operator
- Действие
- Вызвать approve на zero address для этого token ID через доверенный путь
- Критерий завершения
- getApproved того же token ID возвращает zero address
- Наблюдение
- ERC-721 isApprovedForAll=true
- Действие
- Вызвать setApprovalForAll(operator, false)
- Критерий завершения
- isApprovedForAll для той же пары возвращает false
- Наблюдение
- ERC-1155 isApprovedForAll=true
- Действие
- Вызвать setApprovalForAll(operator, false) у exact contract
- Критерий завершения
- Повторное чтение той же пары возвращает false
- Наблюдение
- Operator неизвестен, но нужен маркетплейсу
- Действие
- Проверить официальный contract и текущую необходимость
- Критерий завершения
- Есть документированная причина сохранить либо approval отозван
- Наблюдение
- Уже был несанкционированный transfer
- Действие
- Сохранить receipts/events, прекратить новые подписи и проверить ключи
- Критерий завершения
- Revoke закрывает только будущий путь, не возвращает NFT
Безопасная транзакция отмены
- 1Постройте вызов сами
Используйте функцию кошелька, официальный explorer или проверенный интерфейс. Seed-фраза, private key и импорт в случайный сайт не нужны.
- 2Прочитайте запрос
Проверьте chain, collection contract, method, operator и false либо zero address. Если запрос переводит NFT или включает true, отмените подпись.
- 3Дождитесь receipt
Hash подтверждает только отправку. Проверьте успешное исполнение в правильной сети.
- 4Перечитайте state
Повторите getApproved или isApprovedForAll с теми же аргументами и сохраните block/time результата.
- 5Проверьте соседние записи
Single-token revoke не снимает operator-for-all; revoke одного contract не меняет другой collection contract.
До подтверждения полезно понимать, что именно подписывает кошелёк: обычное сообщение не равно транзакции `setApprovalForAll`, но непонятная транзакция может включить operator. Изучите сценарии криптомошенничества: такое право часто маскируют под mint, claim или проверку коллекции.
Если operator уже использовал право, revoke — только один слой recovery
Сохраните chain, collection, owner, operator, token IDs, transaction hashes и время. Затем определите причину: выдан только лишний approval, подписана неизвестная транзакция, скомпрометирован интерфейс или раскрыт ключ. В первом случае точный revoke может закрыть путь. При компрометации seed/private key злоумышленник способен выдать approval снова или подписать прямой transfer, поэтому оставшиеся активы переводят в новый кошелёк по безопасному плану. Не платите «recovery service» за обещание отменить уже финальный transfer.
Стоп-сигналы
- интерфейс показывает только имя коллекции без chain и contract address;
- ERC-20 allowance используют как доказательство отсутствия NFT operator;
- для revoke предлагают подписать setApprovalForAll с true или transfer;
- исчезновение сайта из connected apps называют onchain-отменой;
- один revoke распространяют на все collection contracts и сети;
- после кражи обещают вернуть NFT одной транзакцией отмены approval.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- EIP-721 — Non-Fungible Token Standard Ethereum Improvement Proposals · Проверено 22 августа 2026 г. в 10:59 GMT+5
- EIP-1155 — Multi Token Standard Ethereum Improvement Proposals · Проверено 22 августа 2026 г. в 10:59 GMT+5
- OpenZeppelin Contracts 5.x — ERC-721 API OpenZeppelin · Проверено 22 августа 2026 г. в 10:59 GMT+5
