Internal vs external message
Чем internal message отличается от external на TON: кто платит, откуда приходит, и как это влияет на контракт.
Internal vs external message — коротко
External — вход в сеть снаружи (обычно кошелёк пользователя подписал и отправил). Internal — сообщение от контракта к контракту внутри TON. Бизнес-логику почти всегда пиши в recv_internal / receive(...); external у кошелька — только «принять подпись и разослать internal».
Таблица сравнения
| Параметр | External message | Internal message |
|---|---|---|
| Источник | Вне сети (кошелёк, бот с ключом) | Другой контракт / тот же аккаунт |
| Подпись | Нужна (для wallet) | Не «подпись человека», а доверие к sender |
| Оплата газа | Внешний отправитель платит за delivery | value / gas из сообщения и баланса контракта |
| Bounce | Нет классического bounce как у internal | Может bounce при ошибке |
| Типичный вход | recv_external у wallet | recv_internal у приложений |
| В контракте dApp | Редко как основной API | Основной способ вызова |
Когда это external
- Пользователь подтверждает действие в Tonkeeper / TON Connect
- Твой сервис шлёт boc, собранный из signed external wallet message
- Инициализируешь кошелёк (deploy) через внешнюю схему
Когда это internal
- Jetton wallet пишет на vault
- NFT item уведомляет маркетплейс
- Контракт A отвечает контракту B (или bounce возвращает value)
Пример: кошелёк → контракт
Правило: аутентификация в TON — это проверка sender internal-сообщения, а не «как на Ethereum msg.sender после одной транзакции пользователя».
Материалы gramdocs.tech носят образовательный характер и не являются финансовой, юридической или инвестиционной рекомендацией. Работа с блокчейном TON и токеном Gram связана с рисками потери средств. Правовая информация