Перейти к содержанию
Learning Platform
Глоссарий Troubleshooting
Урок 02.05 · 20 мин
Средний
АдресаАккаунтыBounceableBase64urlAccount State

Адреса и Аккаунты

Адреса в TON — это не просто идентификаторы, а сложная система, включающая информацию о workchain, формате отображения и флагах. Подобно тому, как почтовый адрес содержит страну, город и улицу, адрес TON кодирует workchain ID, хеш состояния и флаги bounceable/non-bounceable. Неправильное использование формата адреса — одна из самых частых причин потери средств новичками.

Адреса в TON существенно отличаются от адресов Ethereum. В этом уроке разберём формат адресов, типы аккаунтов и состояния, в которых может находиться аккаунт.


Формат адресов

Адрес TON состоит из двух частей:

  1. workchain_id — номер workchain (8 бит, знаковый)
  2. account_id — 256-битный хеш (SHA-256 от StateInit контракта)

Итого: 36 байт (1 байт workchain + 32 байта хеша + 2 байта CRC16 + 1 байт флагов).

Raw-формат

Raw-адрес записывается как workchain_id:hex_hash:

0:abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890

Здесь 0 — workchain 0 (basechain), далее 64 hex-символа (256 бит).

User-friendly формат

Для удобства используется base64url кодировка с дополнительными флагами:

EQBvW8Z5huBkMJYdnfAEM5JqTNkuWX3diqYENkWsIL0XggGG

User-friendly адрес включает:

  • 1 байт флагов: bounceable/non-bounceable, testnet/mainnet
  • 1 байт workchain_id
  • 32 байта account_id
  • 2 байта CRC16 (контрольная сумма)
NOTE

Один и тот же контракт имеет два user-friendly адреса: bounceable (начинается с EQ...) и non-bounceable (начинается с UQ...). Оба указывают на один аккаунт, но определяют поведение при ошибке.


Bounceable vs Non-bounceable

ТипПрефиксПоведение при ошибкеКогда использовать
BounceableEQ...Сообщение “отскакивает” назадОтправка контрактам
Non-bounceableUQ...Сообщение теряетсяПервый перевод на новый кошелёк

Почему это важно

Если вы отправите Toncoin на bounceable адрес неинициализированного контракта, средства вернутся отправителю (bounce). Если на non-bounceable — средства останутся на аккаунте, даже если контракт ещё не развёрнут.

WARNING

При первом переводе на новый кошелёк всегда используйте non-bounceable адрес (UQ...). Иначе средства отскочат назад, так как контракт кошелька ещё не активирован.


Состояния аккаунта

Аккаунт в TON может находиться в одном из трёх состояний:

1. Uninit (неинициализированный)

  • Аккаунт ещё не развёрнут в сети
  • Может иметь баланс (если получил Toncoin)
  • Не имеет кода и данных
  • Не может обрабатывать сообщения

2. Active (активный)

  • Контракт развёрнут и работает
  • Имеет код, данные и баланс
  • Обрабатывает входящие сообщения
  • Может отправлять исходящие сообщения

3. Frozen (замороженный)

  • Баланс опустился ниже минимального порога
  • Код и данные удаляются из блокчейна
  • Сохраняется только хеш состояния
  • Может быть восстановлен при пополнении баланса
NOTE

В отличие от Ethereum, где аккаунты существуют вечно, в TON аккаунты с нулевым балансом замораживаются и в конечном счёте удаляются. Это освобождает место в блокчейне.


TON vs Ethereum: Адреса

TIP

TON vs Ethereum: Модель адресов

Ethereum использует 20-байтовые адреса (160 бит), полученные из публичного ключа (keccak256). TON использует 36-байтовые адреса, включающие workchain_id + 256-битный хеш от StateInit. Это означает, что адрес TON определяется кодом контракта и начальными данными, а не только ключом.

Модель аккаунтов Ethereum

Вычисление адреса

Адрес TON вычисляется до деплоя контракта:

address = SHA256(StateInit)
StateInit = {code, data, library, split_depth, special}

Это значит:

  • Адрес предсказуем — его можно вычислить офлайн
  • Один и тот же код + данные = один и тот же адрес
  • Можно отправить Toncoin на адрес до деплоя контракта

Частые ошибки

  1. Путают bounceable и non-bounceable адреса: отправка на bounceable-адрес неинициализированного контракта приведёт к возврату средств, а на non-bounceable нет.
  2. Сравнивают адреса в raw-формате как строки, забывая что один и тот же аккаунт имеет разные строковые представления (user-friendly, raw, bounceable/non-bounceable).
  3. Не учитывают workchain ID в адресе: контракт в workchain 0 и контракт в workchain -1 (masterchain) имеют разные адреса даже при одинаковом хеше.
  4. Хардкодят адреса в user-friendly формате без учёта флага testnet, поскольку адрес для mainnet и testnet различаются.

Проверка знанийKnowledge check
Чем адрес TON отличается от адреса Ethereum? Назовите два ключевых отличия.
ОтветAnswer
1) TON использует 36-байтовые адреса (vs 20-байтовые в Ethereum), включающие workchain_id и 256-битный хеш. 2) Адрес TON определяется кодом контракта и начальными данными (StateInit), а не только публичным ключом. Это позволяет предсказать адрес до деплоя и использовать разные контракты на одном ключе.

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 7