Internal Message
Сообщение между двумя смарт-контрактами внутри TON. Основной способ взаимодействия контрактов в актор-модели сети.
Синонимы: внутреннее сообщение, межконтрактное сообщение, in-msg
Internal Message — это сообщение, которое один смарт-контракт TON отправляет другому. В акторной модели TON это единственный способ контрактам общаться: прямых синхронных вызовов между контрактами не существует — только асинхронные сообщения.
Структура
Internal-message в TVM — это cell, который содержит:
- Адрес отправителя (контракт-источник).
- Адрес получателя (целевой контракт).
- Сумму TON и опциональные jetton/extra currencies.
- Опкод (32-битный префикс тела), по которому получатель решает, что делать.
- Тело — произвольные данные по схеме, описанной в TLB или ABI.
- Bounce-флаг — нужно ли возвращать сообщение при ошибке.
Как это работает
Когда контракт-источник в action-phase эмитит исходящее сообщение, оно попадает в outbound-очередь его шарда. Сеть маршрутизирует его до шарда получателя — это может занять один-два блока, если адресаты в разных шардах. Дальше получатель обрабатывает internal-message в своей следующей транзакции: проверяет opcode, парсит тело, исполняет логику.
Важные особенности
- Асинхронность. Между отправкой и обработкой проходит хотя бы один блок. Логика «вызвал — получил ответ» собирается из двух раздельных транзакций.
- Стоимость. Платит обычно отправитель: forward-fee за маршрутизацию плюс gas получателя, если он списывается из приложенной суммы (
mode 0). - Гарантии доставки. Сеть гарантирует доставку, но не время. Если получатель не существует или отказывается — сообщение бонсится обратно при включённом bounce-флаге.
Internal-messages — главная единица денежного и логического потока в TON. Любой DEX-свап, любой jetton-перевод, любой NFT-mint — это цепочка из внутренних сообщений.