Четыре поля до закрытия
ПолеЧто должно быть установленоПочему это важно
Source accountТочный адрес существующего token accountЗакрывается account, а не wallet и не mint
Program ownerToken Program либо Token-2022Instruction должна уйти в программу, которая владеет данными
AuthorityOwner или текущий close authorityДругой signer не получает право закрытия
DestinationПроверенный writable accountИменно туда перейдут lamports source account
Четыре поля до закрытия
Поле
Source account
Что должно быть установлено
Точный адрес существующего token account
Почему это важно
Закрывается account, а не wallet и не mint
Поле
Program owner
Что должно быть установлено
Token Program либо Token-2022
Почему это важно
Instruction должна уйти в программу, которая владеет данными
Поле
Authority
Что должно быть установлено
Owner или текущий close authority
Почему это важно
Другой signer не получает право закрытия
Поле
Destination
Что должно быть установлено
Проверенный writable account
Почему это важно
Именно туда перейдут lamports source account

Сначала доказать, какой account вы закрываете

Основной wallet address и Token Account — разные объекты. Token account хранит mint, owner, raw amount, состояние native/frozen и optional close authority; его program owner указывает, кто интерпретирует эти данные. Associated Token Account (ATA) — стандартный адрес такого счёта, но у одного owner могут быть и другие accounts того же mint. Поэтому список для уборки получают on-chain по owner и обеим token programs, а не из скрытых карточек одного приложения.

Обычный account, frozen и wrapped SOL закрываются не одинаково

Decision tool по состоянию source
НаблюдениеМожно готовить CloseAccount?Следующая проверка
Обычный token amount равен нулюДа, при верных authority/programDestination и точные instruction accounts
Frozen, но token amount равен нулюДа: freeze сам по себе не запрещает closeOwner/close authority и program
Обычный token amount больше нуляНетНе сжигать и не переводить без проверки mint и получателя
Wrapped SOL accountОтдельная ветка: допускается ненулевой token amountUnderlying lamports и ожидаемое разворачивание SOL
Token-2022 с extensionsТолько после extension-aware проверкиДополнительные close checks текущей версии программы
Decision tool по состоянию source
Наблюдение
Обычный token amount равен нулю
Можно готовить CloseAccount?
Да, при верных authority/program
Следующая проверка
Destination и точные instruction accounts
Наблюдение
Frozen, но token amount равен нулю
Можно готовить CloseAccount?
Да: freeze сам по себе не запрещает close
Следующая проверка
Owner/close authority и program
Наблюдение
Обычный token amount больше нуля
Можно готовить CloseAccount?
Нет
Следующая проверка
Не сжигать и не переводить без проверки mint и получателя
Наблюдение
Wrapped SOL account
Можно готовить CloseAccount?
Отдельная ветка: допускается ненулевой token amount
Следующая проверка
Underlying lamports и ожидаемое разворачивание SOL
Наблюдение
Token-2022 с extensions
Можно готовить CloseAccount?
Только после extension-aware проверки
Следующая проверка
Дополнительные close checks текущей версии программы

Wrapped SOL (WSOL) — native-mint token account, где lamports отражаются как token amount после синхронизации. Официальный CloseAccount делает для него исключение: счёт можно закрыть с ненулевым token amount, чтобы вернуть underlying SOL в destination. Это не правило для любого SPL-токена. В transaction preview проверьте source, native state, destination и полную транзакцию Solana; не подменяйте unwrap переводом незнакомого токена.

Token-2022 сохраняет базовую схему CloseAccount, но отдельные extensions добавляют проверки. Сначала декодируйте account через правильный program ID и перечислите расширения, затем сверяйте их с текущей документацией и кодом программы. Полномочия токена Solana на mint-level и close authority одного token account — разные поверхности: закрытие пустого account не отзывает freeze, mint или permanent-delegate права выпуска.

Соберите закрытие как проверяемую операцию

Перед подписью

  1. 1
    Закрепите cluster и slot

    Сохраните genesis/cluster, commitment и slot чтения; одинаковый адрес в другой сети означает другой state.

  2. 2
    Декодируйте source

    Запишите program owner, mint, token owner, raw amount, native/frozen state, close authority и extensions.

  3. 3
    Определите signer

    Если close authority задан, используйте его; иначе право подтверждает owner. Для multisig сохраните точный набор signer accounts.

  4. 4
    Проверьте destination

    Сопоставьте адрес с контролируемым получателем. CloseAccount не обязан возвращать lamports fee payer или token owner.

  5. 5
    Симулируйте exact instruction

    Проверьте program ID, source, destination, authority и дополнительные instructions; не подписывайте пакет с несвязанным transfer/approve.

  6. 6
    Зафиксируйте до и после

    Сохраните source lamports, destination lamports, fee payer, signature и ожидаемый post-state.

Удаление подтверждают двумя изменениями состояния

После подтверждения signature перечитайте source и destination на том же commitment. Успешный результат: source account больше не возвращается RPC, а destination получил ровно его прежние lamports с учётом других изменений этой транзакции. Позднее ATA можно создать заново; это новый account lifecycle, а не восстановление старых данных. Если signature failed, никакого возврата не предполагают — разбирают error и текущий state заново.

Stop-сигналы и восстановление

  • amount взят из округлённого интерфейса, а raw state не сохранён;
  • program ID не совпадает с owner source account либо Token-2022 extensions не декодированы;
  • destination предложен сайтом или ботом и не принадлежит ожидаемому получателю;
  • close authority неизвестен, но предлагают передать seed или заменить authority отдельной скрытой инструкцией;
  • пакет одновременно создаёт delegate, переводит токены или меняет mint-level authority;
  • обещают одинаковый rent refund для любого account без чтения его lamports.

Если обнаружен неизвестный delegate, сначала определите, кто и сколько ещё вправе списать: сам CloseAccount не является revoke и не возвращает уже выведенные активы. При скомпрометированном owner остановите массовую уборку, сохраните транзакции и перенесите ценные balances по заранее проверенному плану. Для обычной ошибки обновите blockhash/state, исправьте только доказанную причину и заново покажите пользователю source, destination и authority.

Источники

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

  1. Solana Docs — Close Token Account Solana Foundation · Проверено 23 августа 2026 г. в 15:39 GMT+5
  2. Solana Docs — Set Authority Solana Foundation · Проверено 23 августа 2026 г. в 15:39 GMT+5
  3. Solana Docs — Accounts Solana Foundation · Проверено 23 августа 2026 г. в 15:39 GMT+5
  4. Solana Docs — Sync Native Solana Foundation · Проверено 23 августа 2026 г. в 15:39 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.