Разные строки могут вести к одному account
Raw-форма записывает числовой идентификатор рабочей цепочки (workchain_id), двоеточие и 256-bit идентификатор аккаунта (account_id) в hexadecimal. Для basechain типично начало 0:, для masterchain — -1:. User-friendly форма упаковывает flags, workchain_id и тот же account_id, добавляет checksum и затем применяет Base64 либо Base64url. Конвертация между представлениями не создаёт новый кошелёк и не перемещает средства: меняется способ записи адреса назначения (destination).
| Форма | Что содержит | Практическая граница |
|---|---|---|
| Raw: 0:… или -1:… | workchain_id + account_id | Нет checksum, bounce и testnet metadata |
| Bounceable friendly: обычно EQ… mainnet | Flags + account + CRC16 | Просит wallet сформировать bounceable internal message, если destination initialized |
| Non-bounceable friendly: обычно UQ… mainnet | Тот же account с другим flag byte + CRC16 | Просит non-bounceable message; часто нужен для ещё не инициализированного wallet |
- Форма
- Raw: 0:… или -1:…
- Что содержит
- workchain_id + account_id
- Практическая граница
- Нет checksum, bounce и testnet metadata
- Форма
- Bounceable friendly: обычно EQ… mainnet
- Что содержит
- Flags + account + CRC16
- Практическая граница
- Просит wallet сформировать bounceable internal message, если destination initialized
- Форма
- Non-bounceable friendly: обычно UQ… mainnet
- Что содержит
- Тот же account с другим flag byte + CRC16
- Практическая граница
- Просит non-bounceable message; часто нужен для ещё не инициализированного wallet
Bounce определяет поведение сообщения при ошибке выполнения
В TON перевод — internal message к smart contract account. Bounce означает механизм возвратного сообщения при неуспешной обработке: у bounceable message оставшаяся value может вернуться отправителю за вычетом применимых fees. Non-bounceable сообщение не ожидает такого возврата. Это не кнопка refund и не гарантия полной суммы: результат зависит от состояния account, исполнения и network fees.
Особенно важен uninitialized destination. Новый wallet contract может иметь будущий address, вычисленный из StateInit, но ещё не быть deployed. Официальный wallet workflow рекомендует проверять состояние и принудительно ставить bounce=false для uninitialized account. Для initialized destination приложение может использовать flag из user-friendly представления. Отправитель не должен решать это заменой двух первых символов вручную.
Checksum ловит опечатку, network flag — неправильную среду
CRC16 в friendly address помогает обнаружить повреждённую строку, но не подтверждает личность получателя. Testnet-only flag позволяет mainnet wallet остановить несовместимый перевод. Raw address этих защит не несёт: одинаковая hex-структура не сообщает интерфейсу, для какой среды пользователь получил строку. Поэтому raw удобен для low-level tooling, но не является предпочтительным способом обмена адресами между людьми.
Stop-сигналы перед отправкой
- Получатель прислал raw-строку, а приложение не показывает результат конвертации и network.
- Checksum не проходит или строка короче/длиннее ожидаемой friendly form.
- Mainnet wallet распознаёт testnet-only flag.
- Destination uninitialized, но интерфейс собирается отправить bounceable message без предупреждения.
- Сервис предлагает исправить адрес заменой EQ на UQ либо наоборот как обычный текст.
Формат выбирают после проверки destination state
| Результат | Действие | Recovery |
|---|---|---|
| Friendly address валиден, mainnet, destination initialized | Использовать строку, полученную от владельца; wallet применит её bounce flag | При ошибке не пересылать автоматически: проверить transaction status и bounced message |
| Friendly address валиден, destination uninitialized | Использовать non-bounceable workflow, поддержанный wallet, и малый тест | Если отправка ещё pending — не дублировать; дождаться результата и проверить account state |
| Дан raw address | Конвертировать доверенной библиотекой в обе friendly forms и сверить underlying account_id | Запросить у получателя user-friendly address с его receiving screen |
| Checksum, flag, workchain или сеть не сходятся | Остановить отправку | Получить адрес повторно по независимому каналу; не исправлять символы догадкой |
- Результат
- Friendly address валиден, mainnet, destination initialized
- Действие
- Использовать строку, полученную от владельца; wallet применит её bounce flag
- Recovery
- При ошибке не пересылать автоматически: проверить transaction status и bounced message
- Результат
- Friendly address валиден, destination uninitialized
- Действие
- Использовать non-bounceable workflow, поддержанный wallet, и малый тест
- Recovery
- Если отправка ещё pending — не дублировать; дождаться результата и проверить account state
- Результат
- Дан raw address
- Действие
- Конвертировать доверенной библиотекой в обе friendly forms и сверить underlying account_id
- Recovery
- Запросить у получателя user-friendly address с его receiving screen
- Результат
- Checksum, flag, workchain или сеть не сходятся
- Действие
- Остановить отправку
- Recovery
- Получить адрес повторно по независимому каналу; не исправлять символы догадкой
Успешный decoder должен показать raw form, bounceable и non-bounceable variants и test-only status, причём account_id во всех вариантах совпадает. Затем отдельно сверяют destination в интерфейсе получателя и делают небольшой тест, если это допустимо. После отправки transaction hash и состояние account проверяют до повтора: другой текст адреса не означает другого получателя, а повтор может создать второй перевод.
Частые вопросы
EQ и UQ — разные кошельки?
Нет, если после decoding совпадают workchain и account_id. Различаются flags и checksum представления.
Можно заменить EQ на UQ вручную?
Нет: flag входит в данные checksum. Используйте библиотеку или wallet, которые корректно пересобирают всю строку.
Bounceable вернёт всю сумму при любой ошибке?
Нет. Bounce зависит от message processing, account state и fees; сначала изучите transaction trace, а не отправляйте повтор.
Источники
Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.
- TON Docs — Internal address formats TON Foundation · Проверено 19 августа 2026 г. в 20:15 GMT+5
- TON Docs — Addresses workflow TON Foundation · Проверено 19 августа 2026 г. в 20:15 GMT+5
- TON Docs — Security best practices TON Foundation · Проверено 19 августа 2026 г. в 20:15 GMT+5
