Транзакція в TON процес, що включає:
- Відправлення вхідного повідомлення для активізації смарт-контракту;
- Виконання дій всередині контракту;
- Генерація вихідних повідомлень інші учасники.
Загальні компоненти транзакції#
- Акаунт, якому належить транзакція;
- Логічний час транзакції;
- 0 або 1 вхідне повідомлення;
- N вихідних повідомлень;
- Початковий і кінцевий стан рахунку (включаючи баланс);
- Загальна сума зборів валідаторів;
- Детальне опис (тип + проміжні кроки).
Логічний час
- Точне упорядкування подій у асинхронній системі смарт-контрактів;
- Кожне виходяче повідомлення отримує свій тимчасовий штамп;
- Строго зростаюче для повідомлень одного контракту;
- Валідатори використовуються для упорядкування і обробки.
Види транзакцій#
| Тип | Назначення |
|---|---|
| Звичайні | Опрацюють вхідні повідомлення, змінюють стан, генерують вихідні |
| Зберігання | Збір платежів за зберігання рахунку (нікого коду не викликають) |
| Tick | На початку кожного блоку майстер-класу |
| Tock | В кінці блоку майстер-класу |
| Розрізники (split) | Аккаунт поділяється на ξ і ξ' (шардування) |
| Об'єднання (merge) | Об'єднання облікових записів (оптимізація) |
Фази звичайних транзакцій#
- Фаза зберігання (storage) збору плати за зберігання;
- Фаза кредитування обліковий запис отримує суму вхідного повідомлення;
- Фаза обчислення (compute) код контракту викликається в TVM, завершується exit-кодом + новими даними + списком дій;
- Фаза дії (action) виконання дій з переліку;
- Фаза відскоку (bounce) якщо перервано і встановлено відскочний флаг → повідомлення повертається до відправника.
Особливості#
Транзакції зберігання
- Вставляються валідаторами при умовах:
- Акаунт давно не використовувався;
- Баланс недостатній для оплати зберігання;
- Якщо баланс впаде нижче мінімуму → обліковий запис заморожується, код і дані замінюються хешем.
Tick + Tock
- Зарезервовані для спеціальних системних смарт-контрактів;
- Автоматично викликаються на кожному блоці.
Розділ
- Транзакція підготовки поділу (як tock) для ξ останній у блоці шардчейна;
- Транзакція установки розділення для ξ' з посиланням на підготовку.
Об'єднання
- Транзакція підготовки об 'єднання для ξ' → конвертація стану і балансу в повідомлення-конструктор;
- Транзакція установки об'єднання для ξ обробляє повідомлення.