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

Action Phase

Фаза транзакции в TON, в которой применяются исходящие сообщения и обновляется состояние контракта. Идёт сразу после compute-phase.

Синонимы: action phase, фаза действий, action-phase

Action Phase — это четвёртая фаза транзакции в TON, в которой применяются результаты compute-phase: отправляются исходящие сообщения, обновляется storage, выполняются специальные операции вроде reserve.

Что происходит

В compute-phase контракт не отправляет сообщения напрямую — он лишь формирует action list: список действий, которые нужно выполнить. После того как compute закончилась успешно, начинается action-phase, и сеть последовательно применяет действия из списка:

  • send_raw_message — отправить internal-message с указанным send-mode.
  • set_code — обновить код контракта (для самообновляемых контрактов).
  • reserve_currency — зарезервировать часть баланса, чтобы её нельзя было потратить в этой же транзакции.
  • change_library — добавить или удалить библиотеку cell.

Действия применяются по очереди. Если одно из них не удаётся (например, не хватает баланса на forward-fee), action-phase прерывается, и оставшиеся действия не выполняются.

Action-phase как отдельная точка отказа

Это важно: compute-phase прошла успешно, exit_code = 0, а действия всё равно могли провалиться. Поэтому у action-phase есть свой result_code. Типичные коды:

КодЧто значит
32Action list invalid.
33Слишком много действий (больше 255).
34Invalid action mode.
37Not enough TON для отправки сообщения.
38Not enough extra currencies.

Чем отличается от EVM

В EVM логика и отправка средств — это одна и та же атомарная фаза, она либо вся проходит, либо вся откатывается. В TON compute и action разделены: вы можете успешно «решить, что отправить», а потом не суметь это отправить из-за нехватки баланса. Это особенность акторной модели и одна из главных причин подробной структуры транзакции.

См. также