Сначала найдите точную связь аккаунта с токеном
Hedera Token Service (`HTS`) хранит отдельную связь для каждой пары аккаунта и токена. В документации она называется `token relationship`. Запросите её через `SDK`, узел консенсуса или API зеркального узла (`mirror node`). Зафиксируйте сеть, `account ID`, `token ID`, идентификатор транзакции и её тип. Нулевой баланс не доказывает отсутствие связи, а одинаковый тикер не доказывает совпадение токена. Исходный баланс (`raw balance`) показывает целую сумму, а `decimals` — число десятичных разрядов.
`CryptoTransfer` — обычная транзакция перевода. Поле `maxAutoAssociations` задаёт число автоматических связей, а `usedAutoAssociations` показывает занятые слоты. Значение `-1` означает отсутствие предела, `0` отключает автоматическую привязку. Флаг `receiver_sig_required` означает, что входящий перевод требует подписи получателя.
| Состояние до перевода | Ожидаемый результат | Следующая проверка |
|---|---|---|
| Связь уже есть | Новый слот не нужен | Подпись, баланс, KYC, заморозка и комиссии токена |
| Связи нет, `maxAutoAssociations = -1` | Связь может создаться автоматически | Остальные правила токена и подписи |
| Связи нет, свободен положительный лимит | Занимается один автоматический слот | Актуальные `max` и `used` на одной высоте |
| Связи нет, `maxAutoAssociations = 0` | `TOKEN_NOT_ASSOCIATED_TO_ACCOUNT` | Ручная привязка через `TokenAssociate` |
| Связи нет, положительный лимит исчерпан | `NO_REMAINING_AUTOMATIC_ASSOCIATIONS` | Ручная привязка или изменение лимита аккаунта |
| `receiver_sig_required = true` | Нужна подпись получателя при любом состоянии связи | Фактический код ошибки и подписанные байты |
- Состояние до перевода
- Связь уже есть
- Ожидаемый результат
- Новый слот не нужен
- Следующая проверка
- Подпись, баланс, KYC, заморозка и комиссии токена
- Состояние до перевода
- Связи нет, `maxAutoAssociations = -1`
- Ожидаемый результат
- Связь может создаться автоматически
- Следующая проверка
- Остальные правила токена и подписи
- Состояние до перевода
- Связи нет, свободен положительный лимит
- Ожидаемый результат
- Занимается один автоматический слот
- Следующая проверка
- Актуальные `max` и `used` на одной высоте
- Состояние до перевода
- Связи нет, `maxAutoAssociations = 0`
- Ожидаемый результат
- `TOKEN_NOT_ASSOCIATED_TO_ACCOUNT`
- Следующая проверка
- Ручная привязка через `TokenAssociate`
- Состояние до перевода
- Связи нет, положительный лимит исчерпан
- Ожидаемый результат
- `NO_REMAINING_AUTOMATIC_ASSOCIATIONS`
- Следующая проверка
- Ручная привязка или изменение лимита аккаунта
- Состояние до перевода
- `receiver_sig_required = true`
- Ожидаемый результат
- Нужна подпись получателя при любом состоянии связи
- Следующая проверка
- Фактический код ошибки и подписанные байты
Если связи нет, разберите лимит до ручной привязки
Автоматически созданные аккаунты сейчас получают `maxAutoAssociations = -1`. Для аккаунта из транзакции создания `CryptoCreate` это предполагать нельзя. При положительном лимите нужны актуальные значения `max` и `used` либо симуляция. Список в кошельке может быть неполным.
Если автоматической связи не будет, используйте `TokenAssociate` — транзакцию ручной привязки. В ней указывают точные `account ID` и `token ID`. Подписывает её ключ ассоциируемого аккаунта. Отправитель не может сделать это незаметно за получателя. После `SUCCESS` запрос должен показать новую связь. Статус `TOKEN_ALREADY_ASSOCIATED_TO_ACCOUNT` означает, что она уже существовала.
| Статус | Что произошло | Куда смотреть |
|---|---|---|
| `TOKEN_NOT_ASSOCIATED_TO_ACCOUNT` | Связи нет, автоматическая привязка отключена | Точная пара и `TokenAssociate` |
| `NO_REMAINING_AUTOMATIC_ASSOCIATIONS` | Положительный лимит автоматических связей исчерпан | Значения `max` и `used` |
| `TOKEN_ALREADY_ASSOCIATED_TO_ACCOUNT` | Ручная привязка повторяет существующую | Вернуться к результату перевода |
| `INVALID_SIGNATURE` или `RECEIVER_SIG_REQUIRED` | Не выполнено требование подписи | Структура ключа, подписанные байты и точный статус |
| `ACCOUNT_FROZEN_FOR_TOKEN` или `ACCOUNT_KYC_NOT_GRANTED_FOR_TOKEN` | Связь есть, но движение блокирует правило токена | Заморозка, KYC и действия эмитента |
- Статус
- `TOKEN_NOT_ASSOCIATED_TO_ACCOUNT`
- Что произошло
- Связи нет, автоматическая привязка отключена
- Куда смотреть
- Точная пара и `TokenAssociate`
- Статус
- `NO_REMAINING_AUTOMATIC_ASSOCIATIONS`
- Что произошло
- Положительный лимит автоматических связей исчерпан
- Куда смотреть
- Значения `max` и `used`
- Статус
- `TOKEN_ALREADY_ASSOCIATED_TO_ACCOUNT`
- Что произошло
- Ручная привязка повторяет существующую
- Куда смотреть
- Вернуться к результату перевода
- Статус
- `INVALID_SIGNATURE` или `RECEIVER_SIG_REQUIRED`
- Что произошло
- Не выполнено требование подписи
- Куда смотреть
- Структура ключа, подписанные байты и точный статус
- Статус
- `ACCOUNT_FROZEN_FOR_TOKEN` или `ACCOUNT_KYC_NOT_GRANTED_FOR_TOKEN`
- Что произошло
- Связь есть, но движение блокирует правило токена
- Куда смотреть
- Заморозка, KYC и действия эмитента
Старый статус `TOKENS_PER_ACCOUNT_LIMIT_EXCEEDED` относится к операциям до HIP-367. Официальная документация не указывает общий текущий предел числа токенов. Не объясняйте им новую ошибку без времени консенсуса и квитанции (`receipt`) транзакции.
Требование подписи проверяется отдельно
При `receiver_sig_required = true` входящий `CryptoTransfer` требует ключ получателя. Существующая связь и свободный слот этого не отменяют. Сохраните фактический статус предварительной проверки или `receipt`: перечень `ResponseCodeEnum` содержит разные коды. Не переименовывайте `INVALID_SIGNATURE` в `RECEIVER_SIG_REQUIRED` без данных сети. Содержимое подписи проверяйте локально, не передавая закрытый ключ.
У `TokenAirdrop` есть отдельный ожидающий исход
`TokenAirdrop` — отдельная транзакция раздачи токенов. При готовой связи или свободном слоте она может перевести токен сразу. Без слота возникает `pending airdrop` — ожидающая запись. Токены ещё не списаны у отправителя и не зачислены получателю. Отсутствующая обязательная подпись тоже ведёт в эту запись. Обычный `CryptoTransfer` ожидающую запись не создаёт. Для принятия получатель подписывает транзакцию `TokenClaimAirdrop`.
| Тип операции | Проверяемый итог | Что делать дальше |
|---|---|---|
| `CryptoTransfer` | `SUCCESS` и изменившийся баланс | Если ошибка — действовать по её точному коду |
| `TokenAirdrop` | Прямой перевод или точная ожидающая запись | Не считать ожидающую запись зачислением |
| `TokenClaimAirdrop` | Получатель подписал принятие, связь и перевод выполнены | Проверить исчезновение записи и новый баланс |
| `TokenAssociate` | `SUCCESS` и новая связь | После этого отдельно повторить или проверить перевод |
- Тип операции
- `CryptoTransfer`
- Проверяемый итог
- `SUCCESS` и изменившийся баланс
- Что делать дальше
- Если ошибка — действовать по её точному коду
- Тип операции
- `TokenAirdrop`
- Проверяемый итог
- Прямой перевод или точная ожидающая запись
- Что делать дальше
- Не считать ожидающую запись зачислением
- Тип операции
- `TokenClaimAirdrop`
- Проверяемый итог
- Получатель подписал принятие, связь и перевод выполнены
- Что делать дальше
- Проверить исчезновение записи и новый баланс
- Тип операции
- `TokenAssociate`
- Проверяемый итог
- `SUCCESS` и новая связь
- Что делать дальше
- После этого отдельно повторить или проверить перевод
Перед повтором откройте запись транзакции (`record`) и определите её тип. Название кнопки в кошельке недостаточно. После `SUCCESS` запросите связь, исходный баланс и `record` ещё раз. Общая проверка перевода отделит результат сети от задержки индексатора. Не повторяйте операцию, пока неизвестен её итог.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- Hedera account properties Hedera · Проверено 25 августа 2026 г. в 00:08 GMT+5
- Hedera token airdrops Hedera · Проверено 25 августа 2026 г. в 00:08 GMT+5
- Hedera TokenAssociate Hedera · Проверено 25 августа 2026 г. в 00:08 GMT+5
- HIP-904 — frictionless airdrops Hedera Improvement Proposals · Проверено 25 августа 2026 г. в 00:08 GMT+5
- Hedera response codes protobuf Hedera Protobufs · Проверено 25 августа 2026 г. в 00:08 GMT+5
- Hiero consensus node — CryptoTransfer auto-association step Hiero · Проверено 25 августа 2026 г. в 00:08 GMT+5
