Bounceable и non-bounceable адреса TON: в чём разница

Bounceable-адрес в TON — запись адреса с флагом, который просит вернуть перевод отправителю, если смарт-контракт получателя не смог его обработать.

В TON каждый кошелёк — это смарт-контракт, а у его адреса есть несколько форм записи. «Сырая» форма выглядит как 0: и шестнадцатеричная строка. Пользователям обычно показывают user-friendly форму в base64, в которую зашиты флаги: bounceable или non-bounceable, основная или тестовая сеть, а также контрольная сумма. Bounceable-адреса в основной сети обычно начинаются с EQ, non-bounceable — с UQ. Важно понимать: это один и тот же аккаунт, просто с разной «инструкцией» для отправителя.

Флаг bounce определяет, что произойдёт при ошибке. Если перевод отправлен с флагом bounce, а контракт получателя не развёрнут или завершился с ошибкой, сеть вернёт средства отправителю за вычетом комиссий. Без флага средства останутся на адресе получателя даже в этом случае. Для контрактов и бирж bounce полезен — он защищает от отправки на неверный контракт.

Проблема возникает с новыми кошельками. Кошелёк, на который ещё ни разу не приходили средства, не инициализирован: контракт не развёрнут. Если отправить на него TON по bounceable-адресу, перевод отскочит обратно. Поэтому для обычных кошельков пользователей рекомендуется non-bounceable формат (UQ…), и современные кошельки показывают по умолчанию именно его.

Типичные ошибки: продавец считает EQ- и UQ-адреса разными и не находит платёж, разработчик сравнивает адреса как строки вместо приведения к сырой форме, клиент отправляет средства на тестовый адрес из основной сети. Надёжный подход — разбирать адрес библиотекой TON и сравнивать сырую форму.

В Moonvex каждому платежу в TON выдаётся отдельный адрес, поэтому комментарий указывать не нужно, а платёж сопоставляется автоматически.

Частые вопросы

EQ… и UQ… — это разные кошельки?

Нет, это один и тот же аккаунт. Отличается только флаг bounce, который влияет на поведение перевода при ошибке.

Почему перевод TON вернулся обратно?

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

Какой формат адреса показывать клиентам?

Для кошельков пользователей — non-bounceable. Для смарт-контрактов и сервисов, которые точно развёрнуты, допустим bounceable.

Где это пригодится

Связанные термины

Начните принимать оплату сегодня

Аккаунт и первый проект за минуту, без абонентской платы.

Создать аккаунт