Основы блокчейна
В этом разделе разобраны основные концепции, на которых основана работа транзакций в TON. Вы узнаете, как взаимодействуют аккау нты и смарт-контракты, как сообщения запускают асинхронные транзакции и как мультичейн-структура TON записывает эти транзакции.
Модель выполнения
Актор
Актор — это абстрактная поведенческая модель. Она формализована как вычислительный объект, который реагирует на входящие сообщения, изменяет своё внутреннее состояние, отправляет сообщения другим акторам и создаёт новых. Акторы изолированы: у них нет доступа к состояниям друг друга, они взаимодействуют только сообщениями.
Другими словами:
Актор — независимая сущность со своим состоянием и поведением. Акторы взаимодействуют, обмениваясь сообщениями. Каждый актор может:
- изменять своё состояние
- отправлять сообщения другим акторам
- порождать новых акторов
Модель акторов
Модель акторов — это модель параллельных вычислений, которая описывает систему как набор акторов, взаимодействующих с помощью передачи сообщений.
Ключевые свойства модели:
- изоляция акторов
- асинхронная связь
- любая вычислительная абстракция может быть реализована как актор
Модель используется для точного описания и анализа распределённых систем. Например:
- Электронная почта может быть смоделирована как система акторов: пользователи представлены как акторы, чьими адресами служат адреса электронной почты.
- Веб-сервисы с эндпоинтами (например, SOAP) можно воспринимать как акторов, обрабатывающих сообщения, отправленные на их адреса.
Аккаунт
Аккаунт в TON — это актор, характеризующийся следующими компонентами:
- С войства аккаунта — общие свойства любого аккаунта: ID, баланс, статус и последняя транзакция (
last_tx
) - Данные — данные, зависящие от пользователя
- Код — логика конкретного аккаунта, определяющая его поведение
В TON аккаунты всех типов определяются общим состоянием. Примеры:
(ID1, 0 TON, nonexist)
(ID2, 10 TON, uninit, last_tx)
(ID3, -0.5 TON, frozen)
Смарт-контракт
Смарт-контракт — это аккаунт, чьи код и данные уже развёрнуты в блокчейне в дополнение к его общему состоянию.
Разница между аккаунтом и смарт-контрактом
- Аккаунт — это актор, у которого есть общее состояние (такое как баланс, адрес и статус), а также опционально могут быть код и данные.
Пример: (ID1, 0 TON, nonexist)
или (ID2, 2 TON, active, last_tx, data, code)
- Смарт-контракт — это актор с развёрнутыми кодом и данными, которые определяют его поведение.
Пример: (ID2, 2 TON, active, data, code)
Структура сущностей в блокчейне TON
Асинхронность
В TON контракты (акторы) не вызывают друг друга напрямую. Вместо этого они общаются, отправляя сообщения, каждое из которых обрабатывается независимо от других. Всё взаимодействие происходит в виде асинхронной передачи сообщений.
Асинхронность — это свойство коммуникации, которое означает, что сообщение не требуется обрабатывать немедленно. Из этого следуют такие вещи:
- Немедленный ответ не гарантирован. Получатель может ответ с задержкой или не ответить вовсе.
- Отправитель не ждёт ответа. После отправки сообщения актор продолжает обрабатывать другие сообщения или задачи, не блокируясь и не ожидая ответа на предыдущее — даже если этот ответ никогда не придёт.
- Порядок сообщений сохраняется. Все входящие сообщения обрабатываются в порядке их получения. Однако, если сообщение искажено или неполно, его пропускают, и следующее сообщение обрабатывается без задержки.
Это отличается от синхронных моделей, где порядок действий таков: вызов → ожидание ответа → продолжение. В TON результат можно получить только в виде отдельного сообщения — и только если оно явно отправлено.
Сообщение
Сообщение — это набор инструкций, предназначенных для одного актора.
Транзакция
Транзакция представляет собой обновление состояния аккаунта, вызванное входящим сообщением. Она также может создавать одно или несколько исходящих сообщений, в зависимости от логики контракта.
В TON транзакция требуется для обновления состояния аккаунта в ответ на входящее сообщение и, при необходимости, для продолжения взаимодействия с другими аккаунтами с помощью отправки исходящих сообщений.