Token Account — отдельный onchain-account, где хранятся mint, owner, amount, delegate, state и delegatedAmount. Associated Token Account (ATA) — лишь детерминированный адрес распространённого Token Account; у одного владельца могут быть и другие accounts того же mint. Поэтому проверка одного ATA не доказывает отсутствие разрешений на остальных. Сначала зафиксируйте cluster, Token Program ID, mint и точный account address.

Что меняют account-level инструкции
СостояниеdelegatedelegatedAmountПрактический смысл
До approveNone0Только owner/другая допустимая authority распоряжается account
После Approve/ApproveCheckedВыбранный addressЛимит в raw unitsDelegate может transfer или burn до лимита
После частичного расходаТот же addressМеньший остатокПраво сохраняется только на оставшуюся сумму
После RevokeNone0Прежний account delegate больше не распоряжается этим account
Что меняют account-level инструкции
Состояние
До approve
delegate
None
delegatedAmount
0
Практический смысл
Только owner/другая допустимая authority распоряжается account
Состояние
После Approve/ApproveChecked
delegate
Выбранный address
delegatedAmount
Лимит в raw units
Практический смысл
Delegate может transfer или burn до лимита
Состояние
После частичного расхода
delegate
Тот же address
delegatedAmount
Меньший остаток
Практический смысл
Право сохраняется только на оставшуюся сумму
Состояние
После Revoke
delegate
None
delegatedAmount
0
Практический смысл
Прежний account delegate больше не распоряжается этим account

Approve записывает право, а не резервирует и не переводит баланс

`Approve` получает source Token Account, delegate и amount; `ApproveChecked` дополнительно получает mint и decimals и проверяет ожидаемую точность. В обоих случаях owner подписывает установку разрешения. В account одновременно помещается одна пара delegate/allowance: повторный approve, даже другому адресу или на другую сумму, заменяет прежние значения. Amount — raw units, поэтому UI-число надо пересчитать через decimals mint.

Проверка связывает состояние account с конкретной инструкцией

  1. 1
    Найти все accounts

    Получите Token Accounts владельца по обеим программам — original Token Program и Token-2022 — и не ограничивайтесь видимым ATA.

  2. 2
    Снять state

    Для каждого account сохраните mint, owner, amount, state, delegate и delegatedAmount вместе со slot/commitment.

  3. 3
    Найти происхождение

    Если delegate установлен, найдите последнюю успешную Approve или ApproveChecked именно для этого source account и разберите signer, delegate, amount.

  4. 4
    Проверить расход

    Сопоставьте последующие transfer/burn, подписанные delegate, с уменьшением остатка; не выводите лимит из текущего token balance.

  5. 5
    Подтвердить revoke

    После успешной Revoke transaction перечитайте account на новом slot: delegate должен быть None, delegatedAmount — zero.

Подпись и отправка — разные этапы: recent blockhash может истечь, transaction может завершиться ошибкой, а RPC-ответ отправки не доказывает изменение state. Прочитайте статус транзакции Solana, затем состояние Token Account после подтверждения. Перед approve проверьте, что подписывает кошелёк: source, delegate и raw amount должны совпадать с ожидаемым действием.

Permanent Delegate находится в mint, а не в поле account delegate

Расширение PermanentDelegate существует в Token-2022 Mint Account. Такая mint-level authority может подписывать transfer и burn из любого Token Account этого mint; владелец отдельного account не может убрать её инструкцией Revoke. Mint authority может ротировать это полномочие через SetAuthority. Поэтому `delegate=None` в Token Account доказывает отсутствие только обычного account-level delegate, но не отсутствие полномочий эмитента.

Решение при неожиданном delegate
НаблюдениеЧто это означаетВосстановление или stop
Delegate знаком, amount ожидаемАктивное ограниченное разрешениеОставить только если задача ещё нужна; иначе revoke
Delegate неизвестен, owner key безопасенРиск transfer/burn до allowanceНе делать новые approve; отправить Revoke и подтвердить state
Delegate неизвестен, owner key мог утечьRevoke может соревноваться с расходомМигрировать оставшийся баланс на новый owner/account и расследовать подписи
Account frozenTransfer, burn и delegate changes заблокированыНе обещать revoke до thaw; проверить freeze authority mint
Account delegate пуст, mint имеет PermanentDelegateAccount-level revoke неприменимОценить риск mint authority; не считать локальный state полной гарантией
Решение при неожиданном delegate
Наблюдение
Delegate знаком, amount ожидаем
Что это означает
Активное ограниченное разрешение
Восстановление или stop
Оставить только если задача ещё нужна; иначе revoke
Наблюдение
Delegate неизвестен, owner key безопасен
Что это означает
Риск transfer/burn до allowance
Восстановление или stop
Не делать новые approve; отправить Revoke и подтвердить state
Наблюдение
Delegate неизвестен, owner key мог утечь
Что это означает
Revoke может соревноваться с расходом
Восстановление или stop
Мигрировать оставшийся баланс на новый owner/account и расследовать подписи
Наблюдение
Account frozen
Что это означает
Transfer, burn и delegate changes заблокированы
Восстановление или stop
Не обещать revoke до thaw; проверить freeze authority mint
Наблюдение
Account delegate пуст, mint имеет PermanentDelegate
Что это означает
Account-level revoke неприменим
Восстановление или stop
Оценить риск mint authority; не считать локальный state полной гарантией

Итоговый доказательный пакет включает cluster, program ID, mint, Token Account, owner, delegate/delegatedAmount до и после, signature approve/revoke и slot чтения. Остановитесь, если интерфейс не показывает source account, сумму дана без decimals, transaction не подтверждена, account frozen или обнаружен Permanent Delegate. Revoke — защита на будущее для одного account, не возврат активов и не отзыв полномочий всего mint.

Источники

Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.

  1. Solana Docs — Approve Delegate Solana Foundation · Проверено 21 августа 2026 г. в 22:07 GMT+5
  2. Solana Docs — Revoke Delegate Solana Foundation · Проверено 21 августа 2026 г. в 22:07 GMT+5
  3. Solana Docs — Spend permissions Solana Foundation · Проверено 21 августа 2026 г. в 22:07 GMT+5
  4. Solana Docs — Permanent Delegate Solana Foundation · Проверено 21 августа 2026 г. в 22:07 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.