Learning Platform
Глоссарий Troubleshooting
Урок 04.01 · 20 мин
Средний
Actor ModelAsynchronousMessagesTVMConcurrency

Actor Model: фундамент архитектуры TON

Что такое Actor Model

Actor Model — модель вычислений, где actor — это базовая единица, которая:

  1. Имеет собственное состояние (недоступное извне)
  2. Получает и обрабатывает сообщения (по одному за раз)
  3. В ответ на сообщение может: изменить своё состояние, отправить сообщения другим акторам, создать новых акторов
Actor Model: каждый контракт — независимый актор
Actor A (Contract)
Messages
Actor B (Contract)

Actor Model в индустрии

Actor Model — не изобретение TON. Это проверенная модель из 1973 года:

СистемаРеализация Actor Model
Erlang/OTPТелекоммуникации (Ericsson, WhatsApp)
AkkaJVM распределённые системы
Microsoft OrleansCloud-native virtual actors
TONБлокчейн smart contracts

TON как Actor System

В TON каждый аккаунт — actor:

Аккаунт в TON:
├── Address (256-bit unique ID)
├── Code (TVM bytecode — логика обработки сообщений)  
├── Data (persistent state — cells)
├── Balance (TON coins для gas и storage)
└── Message Queue (входящие сообщения)

Правила Actor Model в TON

  1. Изоляция: Контракт A не может прочитать state контракта B. Только отправить сообщение и ждать ответ.
  2. Последовательность: Внутри одного контракта сообщения обрабатываются строго по одному. Нет race conditions внутри контракта.
  3. Асинхронность: Отправка сообщения — fire-and-forget. Ответ придёт в следующей транзакции.
TIP

Почему Actor Model идеален для шардирования

Если каждый контракт — изолированный actor, его можно перенести в любой шард без изменения логики. Нет shared state = нет проблем с distributed locks, нет global state = нет bottleneck. Именно поэтому TON выбрал Actor Model — это архитектурное решение для масштабирования.

Типы сообщений в TON

External Messages

Входящие сообщения из внешнего мира (off-chain → on-chain):

External Message:
Источник:    Кошелёк пользователя (off-chain)
Назначение:  Smart contract (on-chain)
Оплата gas:  Контракт-получатель платит из своего баланса
Bounce:      Невозможен (нет адреса возврата)

Internal Messages

Сообщения между контрактами (on-chain → on-chain):

Internal Message:
Источник:    Smart contract A
Назначение:  Smart contract B
Оплата gas:  Из value, приложенного к сообщению
Bounce:      Да (если bounce: true)

Log Messages

Исходящие сообщения наружу (on-chain → off-chain):

Log Message:
Источник:    Smart contract
Назначение:  Внешние системы (indexers, dApps)
Оплата gas:  Контракт-отправитель
Использование: Events для off-chain подписчиков
Типы сообщений в TON
User Wallet
External msg
Contract A
Contract A
Internal msg + TON
Contract B

Транзакция в TON: anatomy

Транзакция в TON — это обработка одного сообщения одним контрактом:

Transaction:
1. Получить входящее сообщение (internal или external)
2. Credit Phase: зачислить value из сообщения на баланс
3. Compute Phase: выполнить код контракта (TVM)
4. Action Phase: отправить исходящие сообщения
5. Storage Phase: оплатить storage fee
WARNING

Критично для System Design

Одна транзакция обрабатывает одно сообщение одним контрактом. Сложная операция (DEX swap) — это цепочка транзакций: каждый контракт обрабатывает своё сообщение и отправляет следующее. Проектируйте state machines, а не monolithic functions.

Сравнение: TON vs Ethereum execution

АспектEthereum (EVM)TON (Actor/TVM)
Вызов другого контрактаСинхронный — результат мгновенноАсинхронный — результат в следующем блоке
AtomicityВся call chain атомарнаТолько одна транзакция атомарна
Read stateЛюбой контракт может читать state другогоТолько через get-methods (off-chain)
ReentrancyВозможна (уязвимость)Невозможна (sequential processing)
ConcurrencyПоследовательно (одна EVM)Параллельно (разные шарды)
ComposabilityВысокая (DeFi Legos)Ограниченная (async boundaries)
NOTE

Reentrancy невозможна на TON

Один из самых дорогих exploit-ов Ethereum ($60M DAO hack) — reentrancy attack — невозможен на TON. Контракт обрабатывает сообщения по одному, последовательно. Пока текущее сообщение не обработано — следующее не начнёт выполняться. Это inherent security benefit Actor Model.

Implications для System Design

1. Проектируйте State Machines

Каждый контракт — это state machine, который переходит между состояниями при получении сообщений:

DEX Pool State Machine:

State: IDLE
  → recv(swap_request) → State: PROCESSING_SWAP
  
State: PROCESSING_SWAP
  → recv(token_received) → execute swap → State: IDLE
  → recv(timeout) → refund → State: IDLE
  → recv(bounce) → error handling → State: IDLE

2. Планируйте message chains

Сложные операции = цепочки сообщений. Планируйте весь flow заранее:

  • Сколько сообщений?
  • Сколько gas на каждый hop?
  • Что делать при ошибке на каждом шаге?

3. Не полагайтесь на порядок

Если контракт отправил два сообщения разным получателям — нет гарантии, что они обработаются в определённом порядке. Проектируйте для out-of-order delivery.

Проверка знанийKnowledge check
ОтветAnswer

Системный взгляд на actor-model полезно дополнить пониманием низкоуровневого execution: как именно TVM исполняет контракт, как устроен стек, continuation-based control flow и взаимодействие со стеком ячеек.

TVM: actor model и исполнение

Проверьте понимание

Результат: 0 из 0
Аналитический
Вопрос 1 из 3. Почему reentrancy attack (как DAO hack на Ethereum) невозможна на TON?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 5