Внутренние и внешние сообщения
Internal и external messages в TON: кто кого вызывает, как устроена асинхронная модель и чем сообщение отличается от «транзакции EVM».
Сообщения — единица взаимодействия
В TON аккаунты общаются сообщениями, а не синхронными вызовами функций в одной атомарной цепочке (как привычный call в EVM). Есть два типа:
- External — приходит извне сети (обычно от кошелька пользователя)
- Internal — идёт от аккаунта к аккаунту внутри сети
Транзакция на аккаунте — это обработка одного входящего сообщения (плюс порождение исходящих).
External vs internal
| External in | Internal | |
|---|---|---|
| Источник | Вне сети (подписанный запрос кошелька) | Другой аккаунт / контракт |
| Value (Gram) | Не несёт value само по себе как перевод «из воздуха» | Может нести Gram + тело |
| Типичный путь | Пользователь → кошелёк-контракт | Кошелёк → dApp / jetton / NFT |
Пользователь почти никогда не шлёт external напрямую в произвольный dApp-контракт. Стандартный путь:
- Кошелёк принимает external (с подписью).
- Кошелёк отправляет internal сообщения в целевые контракты.
Как это работает
- Узел принимает external → проверяет и создаёт транзакцию на аккаунте-получателе.
- Контракт может эмитировать одно или несколько исходящих internal-сообщений.
- Каждое исходящее позже обработается отдельной транзакцией на получателе.
- Очерёдность задаётся логическим временем (lt) и маршрутизацией шардов.
Это асинхронная модель: «вызвал контракт B» означает «отправил сообщение», а не «дождался return value в той же транзакции». Ответ — отдельным сообщением назад, если ты так спроектировал протокол.
Частые ошибки
Ждать синхронный return как в Solidity call → проектируй request/response сообщениями и храни pending-состояние.
Считать, что external можно слать в любой контракт «как eth_sendRawTransaction на любой адрес» → большинство контрактов принимают value/логику через internal от доверенных отправителей; точка входа пользователя — кошелёк.
Игнорировать bounce → failed internal с bounceable-флагом вернёт value отправителю; обработай bounce-ветку, если это важно для учёта средств.
Что дальше
- Логическое время (Lt) — порядок обработки сообщений
- Газ на TON — комиссии за compute и forward
- Адреса в TON — bounceable-флаг на уровне адреса
Материалы gramdocs.tech носят образовательный характер и не являются финансовой, юридической или инвестиционной рекомендацией. Работа с блокчейном TON и токеном Gram связана с рисками потери средств. Правовая информация