Обработчики сообщений (receive) в Tact
Настроишь текстовые, бинарные и fallback receive-обработчики и поймёшь, какой receiver сработает первым.
Receive в Tact
Контракт на TON не «вызывают как функцию» — ему отправляют сообщение. receive регистрирует обработчик входящего internal сообщения по форме тела: пустое, строка, типизированный message или сырой Slice.
Несколько receivers в одном контракте
Как это работает
- Порядок матчинга: пустой → строковые → типизированные
message→Slicefallback. receive("increment")удобен для ручных тестов из кошелька (comment), но для прод-API лучше бинарныеmessage.receive(msg: SetValue)— компилятор проверяет типы и сам пишет сериализацию.receive(raw: Slice)— последний рубеж; без него неизвестное тело часто даёт exit code об отсутствии receiver.- External-сообщения (
recv_external) в Tact оформляются отдельно черезexternal, не через обычныйreceive.
Частые ошибки
Два receiver на один и тот же вид тела → ошибка компиляции или недостижимый код; оставь один точный матч.
Ждёшь строковый "increment" из TS, а шлёшь бинарный cell → сработает не тот handler (или fallback).
Тяжёлая логика в receive() без проверки context().value → контракт может уйти в минус по storage/gas при спаме пустыми сообщениями.
Что дальше
- Get-методы: чтение состояния контракта — проверить
valueпосле сообщения - Обработка bounce-сообщений — отдельный канал
bounced(...) - Взаимодействие контракт-контракт — как слать
SetValueиз другого контракта
Материалы gramdocs.tech носят образовательный характер и не являются финансовой, юридической или инвестиционной рекомендацией. Работа с блокчейном TON и токеном Gram связана с рисками потери средств. Правовая информация