- Что такое разрешение на токен и почему оно переживает транзакцию, которая его создала?
- Разрешение контракту записывает allowance в хранилище самого токена: с этого момента получатель может вызвать transferFrom и переместить вплоть до этого количества ваших токенов в любой момент, без вашей новой подписи. Оно не привязано к тому свопу или депозиту, который вы делали, — оно остаётся там, пока не будет израсходовано или явно обнулено. Именно поэтому разрешение, выданное приложению, которым вы воспользовались один раз несколько месяцев назад, сегодня всё ещё является действующим правом.
- Что на самом деле означает неограниченное разрешение?
- Кошельки и приложения обычно запрашивают 2^256-1 — наибольшее число, какое вмещает тип, — чтобы вам больше не приходилось подтверждать. Оно не расходуется и не истекает. Если такой контракт скомпрометирован или изначально был вредоносным, потолок того, что он может забрать, — весь ваш баланс этого токена, включая токены, которые вы купите потом.
- Почему в этом списке иногда меньше, чем было разрешено?
- Потому что transferFrom уменьшает allowance молча — он выпускает Transfer, а не Approval, — так что одна лишь история событий говорит только о том, что было выдано. Колонка «Сейчас в цепи» читает allowance(owner, spender) прямо из контракта токена на одном зафиксированном блоке, поэтому она показывает то, что действительно ещё можно потратить. Там, где они расходятся, значение имеет ончейн-величина.
- Пустой результат доказывает, что разрешений у меня нет?
- Нет, и страница говорит об этом прямо, а не намекает на обратное. Разрешения восстанавливаются из событий Approval в блоках, проиндексированных Arcscan. Разрешение, выданное до начала этого диапазона и с тех пор не тронутое, не оставило внутри него события и здесь появиться не может. Просмотренный диапазон блоков напечатан под таблицей.
- Сколько стоит отзыв и работает ли Arcscan с моими ключами?
- Отзыв — это обычная транзакция: approve(spender, 0) или setApprovalForAll(operator, false) для операторского разрешения, отправленная в контракт токена, и газ за неё платится в USDC, как и за любую другую. Arcscan никогда не хранит ключ, никогда не подписывает и никогда ничего не отправляет: он кодирует вызов, показывает вам, что в нём ровно написано, а подтверждаете вы его в своём кошельке. Можно также скопировать calldata и подписать её вообще в другом месте.
- Почему операторское разрешение указано без суммы?
- Потому что у setApprovalForAll суммы нет. Оно уполномочивает оператора перемещать любой ваш токен из этой коллекции, включая те, которых у вас ещё нет, пока вы его не отзовёте. Если показать это прочерком в колонке allowance, самое широкое разрешение на странице выглядело бы самым узким.