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. Типичные коды:
| Код | Что значит |
|---|---|
32 | Action list invalid. |
33 | Слишком много действий (больше 255). |
34 | Invalid action mode. |
37 | Not enough TON для отправки сообщения. |
38 | Not enough extra currencies. |
Чем отличается от EVM
В EVM логика и отправка средств — это одна и та же атомарная фаза, она либо вся проходит, либо вся откатывается. В TON compute и action разделены: вы можете успешно «решить, что отправить», а потом не суметь это отправить из-за нехватки баланса. Это особенность акторной модели и одна из главных причин подробной структуры транзакции.