| Сущность | Роль | Чего она не означает |
|---|---|---|
| Wallet / owner | Авторизует операции своих token accounts | Не является адресом каждого token balance |
| Mint | Идентифицирует актив и его базовые параметры | Не хранит баланс конкретного holder |
| Token Account | Хранит amount одного mint для указанного owner | Не обязан быть ATA |
| ATA | Стандартный Token Account по детерминированному адресу | Не отдельный новый пользователь и не ключевая пара |
- Сущность
- Wallet / owner
- Роль
- Авторизует операции своих token accounts
- Чего она не означает
- Не является адресом каждого token balance
- Сущность
- Mint
- Роль
- Идентифицирует актив и его базовые параметры
- Чего она не означает
- Не хранит баланс конкретного holder
- Сущность
- Token Account
- Роль
- Хранит amount одного mint для указанного owner
- Чего она не означает
- Не обязан быть ATA
- Сущность
- ATA
- Роль
- Стандартный Token Account по детерминированному адресу
- Чего она не означает
- Не отдельный новый пользователь и не ключевая пара
ATA выводится из owner, программы токена и mint
Associated Token Program использует seeds owner public key, Token Program ID и mint address, а собственный program ID — для derivation PDA. Для одной точной тройки owner + token program + mint получается один ATA address. Это означает, что тот же owner и mint могут дать другой ATA при Token-2022 вместо исходного Token Program. Поэтому вычисление без проверки program ID иногда уверенно указывает не туда.
Один owner может иметь несколько счетов одного mint
ATA — канонический удобный маршрут, но Token Program допускает обычные token accounts, созданные с другой keypair или PDA приложения. Поэтому поиск только ATA может пропустить баланс, который лежит в vault, escrow, закрываемом вспомогательном account или просто неассоциированном счёте. И наоборот, наличие пустого ATA не доказывает, что у owner нет единиц этого mint в другом token-account.
RPC — удалённый вызов процедур — getTokenAccountsByOwner перечисляет счета owner с фильтром по mint либо program ID. Для диагностики зафиксируйте cluster, commitment — уровень подтверждённости state — и RPC endpoint: mainnet и devnet относятся к разным состояниям, а индексатор кошелька может показывать более старый slot. Чтобы разобрать транзакцию Solana, каждый найденный account проверяют по mint, owner, amount, state и program owner, а не только по token name.
Получатель токенов — token-account, а owner управляет им
Инструкция transfer перемещает amount между source и destination token accounts одного mint. Пользователь обычно вводит wallet address, а приложение вычисляет или создаёт его ATA. Если destination ATA ещё не существует, транзакция может включить создание за счёт payer — account, который оплачивает создание; точный funding зависит от размера account и текущих rent rules, поэтому не переносите фиксированное число SOL между программами и датами. Для нестандартного destination приложение должно явно объяснить, кому принадлежит token-account.
Проверка до перевода
- 1Зафиксируйте cluster
Mainnet, devnet и local validator не делят accounts. Сеть должна совпадать у кошелька, explorer и RPC.
- 2Подтвердите mint
Используйте полный mint address, а не ticker или картинку. Отдельно прочитайте program owner mint account.
- 3Выведите ATA
Передайте в derivation owner, именно этот mint и правильный Token Program либо Token-2022 ID.
- 4Проверьте существование
Если ATA не создан, убедитесь, что интерфейс добавляет корректную create-associated-token-account instruction и показывает payer.
- 5Симулируйте и прочитайте сообщение
Сверьте destination token-account, owner, mint, amount и программы до подписи; неизвестная дополнительная instruction — stop-сигнал.
Если токен не виден, не отправляйте его повторно
| Результат | Вероятная причина | Recovery |
|---|---|---|
| Transaction failed | State не изменился | Сохранить signature и instruction error; не искать баланс по planned destination |
| Success, destination — ожидаемый ATA | UI или индексатор отстаёт либо скрывает token | Обновить RPC/slot, добавить проверенный mint в интерфейс |
| Success, destination — другой account того же owner | Баланс лежит в non-ATA token-account | Импортировать поддержку account или подготовить осознанный transfer в ATA |
| Destination owner другой | Средства ушли не вашему owner | Остановить новые переводы, сохранить signature и обратиться к владельцу/сервису |
| Mint или program ID другой | Проверяется другой asset route | Повторить derivation с фактическими полями транзакции |
- Результат
- Transaction failed
- Вероятная причина
- State не изменился
- Recovery
- Сохранить signature и instruction error; не искать баланс по planned destination
- Результат
- Success, destination — ожидаемый ATA
- Вероятная причина
- UI или индексатор отстаёт либо скрывает token
- Recovery
- Обновить RPC/slot, добавить проверенный mint в интерфейс
- Результат
- Success, destination — другой account того же owner
- Вероятная причина
- Баланс лежит в non-ATA token-account
- Recovery
- Импортировать поддержку account или подготовить осознанный transfer в ATA
- Результат
- Destination owner другой
- Вероятная причина
- Средства ушли не вашему owner
- Recovery
- Остановить новые переводы, сохранить signature и обратиться к владельцу/сервису
- Результат
- Mint или program ID другой
- Вероятная причина
- Проверяется другой asset route
- Recovery
- Повторить derivation с фактическими полями транзакции
Сначала проверьте signature, успешность и post-token balances, затем перечислите accounts фактического owner. Общая проверка перевода отделяет отправленную instruction от исполненного изменения state. Decimals токена нужны только для форматирования raw amount и не могут исправить неверные mint, owner или destination.
ATA отвечает на вопрос «куда», но не на вопрос «безопасен ли токен»
Правильно вычисленный ATA доказывает стандартный адрес token-account для выбранных owner, program и mint. Он не подтверждает эмитента, цену, ликвидность или отсутствие административных возможностей. Полномочия токена Solana — mint, freeze и расширения Token-2022 — проверяют отдельно. Так маршрутизация не превращается в необоснованный рейтинг актива.
Минимальное воспроизводимое доказательство
- cluster и RPC endpoint;
- owner wallet, mint address и Token Program ID;
- выведенный ATA и список всех token accounts owner для этого mint;
- signature, slot, transaction status и фактический destination;
- raw amount до UI-округления и состояние account после исполнения.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- Solana Docs — Create a Token Account Solana Foundation · Проверено 20 августа 2026 г. в 09:25 GMT+5
- Solana Docs — Program Derived Addresses Solana Foundation · Проверено 20 августа 2026 г. в 09:25 GMT+5
- Solana RPC — getTokenAccountsByOwner Solana Foundation · Проверено 20 августа 2026 г. в 09:25 GMT+5
- Solana Docs — SPL Token basics Solana Foundation · Проверено 20 августа 2026 г. в 09:25 GMT+5
