Криптовалюты

Как проверить делегата Solana-аккаунта токена

Показываем, где в состоянии Solana token account найти delegate и allowance, чем делегат отличается от владельца и как проверить отзыв разрешения.

Как проверить делегата Solana-аккаунта токена

Коротко: чтобы проверить делегата в Solana, откройте состояние нужного token account и отдельно найдите owner, delegate и delegated amount. Владелец контролирует аккаунт, а делегат получает ограниченное разрешение на определённые операции с токенами. Это разрешение относится к конкретному token account и не означает, что делегат владеет кошельком или всеми активами пользователя.

Проверка особенно полезна после взаимодействия с DeFi-приложением, неизвестным сайтом или транзакцией, смысл которой был неясен. Сначала убедитесь, что смотрите правильную сеть, mint и token account. Затем сравните состояние аккаунта до и после действия. Не отправляйте приватные ключи или seed-фразу сервисам, обещающим проверить разрешения.

Owner, token account и delegate

В Solana баланс токена хранится не непосредственно в обычном аккаунте кошелька, а в token account, который относится к определённому mint. Один token account содержит баланс одного вида токена и информацию о владельце, полномочиях и настройках. Для стандартного адреса, вычисляемого по владельцу и mint, часто используется Associated Token Account. Подробнее устройство разобрано в материале об ATA в Solana.

Owner – адрес, который управляет соответствующим token account и может подписывать разрешённые для него действия. Delegate – адрес, которому владелец назначил ограниченную возможность распоряжаться частью токенов в аккаунте. Состояние хранит размер делегированного количества. Поэтому проверяйте сразу два поля: наличие адреса делегата и оставшийся лимит. Одно поле без другого может дать неполную картину.

Делегат не получает контроль над исходным кошельком, seed-фразой или другими token accounts. Но если разрешение активно, он может совершить операции с токенами в рамках полномочий, заданных владельцем. Это уже реальный риск: даже ограниченный объём может быть значительным относительно баланса или цены актива. Перед подтверждением транзакции нужно понимать, какой аккаунт и какой лимит она затрагивает.

Как проверить состояние аккаунта

  1. Определите mint. Найдите полный адрес токена в официальном источнике и сверяйте его с аккаунтом. Тикер может совпадать у нескольких активов. Инструкция по идентификации есть в материале о проверке адреса Solana-токена.
  2. Найдите token account. Откройте аккаунты токена для нужного кошелька и выберите запись с проверенным mint. Если существует несколько счетов одного актива, проверьте каждый.
  3. Проверьте owner. Сверьте его с ожидаемым адресом владельца token account. Не путайте поле владельца самого аккаунта в сети с owner внутри данных токена: это разные уровни.
  4. Найдите delegate. Если поле пусто или равно нулевому значению, активный delegate не указан. Если присутствует адрес, сравните его с ожидаемым приложением и проверьте полный адрес, а не только первые символы.
  5. Прочитайте delegated amount. Уточните остаток разрешённого объёма и учтите decimals mint, чтобы правильно интерпретировать отображаемое количество.
  6. Проверьте последние изменения. Изучите историю транзакций, которая могла назначить, заменить или отозвать полномочие. Сверьте результат после подтверждения сети.

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

Как выдаётся и ограничивается разрешение

Стандартная модель токена позволяет владельцу token account назначить delegate и указать допустимое количество. Подписание происходит ключом владельца аккаунта, а не ключом mint authority. Delegate может использовать разрешение в рамках заданной операции, например перемещать ограниченное количество токенов или выполнять поддерживаемое программой действие. Разрешение не распространяется автоматически на другие счета того же владельца.

У token account действует одно текущее поле делегата. Новое назначение заменяет прежнее значение и устанавливает новое разрешённое количество, поэтому не следует считать, что разные разрешения всегда накапливаются. Фактическое поведение транзакции нужно проверять по используемой программе и типу операции. В Token-2022 могут существовать дополнительные расширения, которые влияют на правила токена; обзор есть в материале о расширениях Token-2022.

Делегирование – не то же самое, что полномочия выпуска или заморозки mint. Mint authority управляет выпуском новых токенов, а freeze authority – функцией заморозки связанных счетов, если она назначена. Эти полномочия относятся к уровню mint и проверяются отдельно; подробности описаны в статье о mint и freeze authority.

Как отозвать неизвестного делегата

Владелец token account может отправить операцию отзыва delegate. После подтверждения транзакции проверьте состояние аккаунта ещё раз: адрес делегата должен быть очищен, а делегированное количество – стать нулевым или отсутствовать в отображении. Запись в истории показывает, что транзакция состоялась, но именно текущее состояние отвечает на вопрос, действует ли разрешение сейчас.

Перед отзывом убедитесь, что выбрали нужный token account и понимаете последствия для подключённого приложения. Отзыв может остановить автоматическую стратегию или сделать невозможным перевод, который ожидал сторонний сервис. Если разрешение выдано неизвестному адресу, сначала обезопасьте основной кошелёк, проверьте остальные счета и не подписывайте новые запросы с тем же сайтом.

Не пытайтесь отозвать разрешение через случайную веб-страницу, куда нужно ввести seed-фразу. Работайте с кошельком, который контролируете, и проверяйте текст операции перед подписью. После подтверждения обновите данные обозревателя и убедитесь, что изменения попали именно в нужную сеть и token account.

Опасные заблуждения

  • «Delegate равен владельцу». Нет, это отдельная роль с ограничением по количеству и конкретным token account.
  • «Пустое поле в одном аккаунте означает отсутствие разрешений везде». У другого mint может быть другой token account и отдельный delegate.
  • «Небольшой лимит всегда безопасен». Оцените количество токенов, цену и возможность повторно выдать разрешение.
  • «Знакомый логотип подтверждает адрес». Проверяйте полный mint и адрес делегата; метаданные можно копировать.
  • «Подключение сайта только для чтения». Подключение может сопровождаться запросом подписи, поэтому разделяйте просмотр публичных данных и транзакцию.
  • «Отзыв удаляет историю». Он меняет текущие полномочия, но предыдущая транзакция остаётся в публичной истории сети.

Профилактика

Периодически просматривайте token accounts, особенно если взаимодействовали с приложениями, которыми больше не пользуетесь. Подписывайте только ожидаемые операции и сверяйте адрес программы и объём разрешения. Если интерфейс показывает бессрочный или большой лимит, выясните, можно ли задать меньший объём и зачем приложению нужен доступ.

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

Итог

Проверка delegate сводится к точному выбору mint и token account, сопоставлению owner, адреса delegate и оставшегося количества. Если разрешение неизвестно, отзовите его через контролируемый кошелёк и проверьте итоговое состояние в сети. Всегда рассматривайте полномочия каждого token account отдельно: это помогает увидеть, чему именно разрешил доступ владелец и какой риск ещё сохраняется.