К основному содержанию
T TON Adoption
← Словарь
NODE/03 · Term

Bounce Message

Автоматический возврат сообщения и приложенных к нему TON отправителю, если контракт-получатель не смог обработать сообщение. Включается флагом bounce.

Синонимы: bounce, бонс, обратное сообщение

Bounce Message — это сообщение, которое сеть TON автоматически возвращает отправителю, если контракт-получатель не смог обработать его внутреннее сообщение. Bounce — это страховка: TON, посланные «не туда», не теряются безвозвратно.

Как срабатывает

Bounce включается, если выполнены оба условия:

  1. У исходного internal-message установлен bounce-флаг (bounce=true). По умолчанию кошельки шлют переводы с bounce=true, кроме случая отправки на ещё не задеплоенный адрес.
  2. Compute-phase получателя упала с ошибкой (любой ненулевой exit code) или контракт по адресу не существует / заморожен.

В этом случае сеть формирует обратное сообщение: оно несёт остаток приложенных TON (минус комиссии) и небольшое тело с информацией об ошибке. Отправитель получает его в новой транзакции.

Тело bounce-сообщения

Bounce-сообщение начинается с opcode 0xFFFFFFFF (сигнал, что это bounce) и содержит первые 256 бит тела исходного сообщения. Этого обычно достаточно, чтобы понять, какой запрос вернулся: opcode и query_id.

Когда отправлять без bounce

В двух типичных случаях кошельки отключают bounce:

  • Перевод на новый адрес. Wallet-контракт получателя ещё не задеплоен — bounce приведёт к потере gas. Адреса на новый контракт обычно показываются в формате UQ... (non-bounceable).
  • Простой перевод TON между пользователями. Если получатель — кошелёк, а не контракт-приложение, bounce не нужен.

Для DeFi-операций bounce почти всегда включён: лучше потратить gas на возврат, чем потерять деньги, если контракт упал.

Что важно знать

Bounce не возвращает 100% приложенных TON. Из суммы вычитаются: gas compute-phase получателя (даже если она упала), forward-fee на сам bounce, plus storage-fee. Поэтому для очень маленьких сумм bounce может быть невыгоден.

См. также