TVM — виртуальная машина TON

Как TVM исполняет смарт-контракты: стек, регистры, продолжения и чем это отличается от привычных VM.

Что такое TVM

TVM (TON Virtual Machine) — стековая виртуальная машина, которая исполняет байткод смарт-контрактов на TON. Каждый контракт — это программа для TVM плюс данные в ячейках.

TVM запускается внутри транзакции: пришло сообщение → TVM обработал его → обновилось состояние аккаунта и, при необходимости, ушли исходящие сообщения.


Модель выполнения

TVM — стековая машина: операнды лежат на стеке, инструкции берут значения сверху и кладут результат обратно.

Ключевые элементы:

  • Стек — основные операнды вычислений
  • Регистры (c0c7) — продолжения, код, данные, конфиг, баланс и служебный контекст
  • Continuations — «продолжения» выполнения: так устроены вызовы, циклы и обработка ошибок
  • Gas — лимит вычислений; закончился газ — выполнение прерывается

Исходники для TVM обычно пишут на Tact, Tolk или FunC. Компилятор выдаёт байткод; на уровне сети исполняется именно он.

tact (fallback highlight)
// Tact 1.6+ — компилируется в байткод TVM
contract Greeter {
    receive(msg: String) {
        // тело receive() → инструкции TVM
        require(msg != "", "empty");
    }
}

Как это работает

  1. На аккаунт приходит сообщение (внутреннее или внешнее).
  2. Сеть создаёт транзакцию и запускает TVM с кодом/данными аккаунта.
  3. TVM читает сообщение, меняет data, тратит газ, может послать новые сообщения.
  4. Результат фиксируется: новый хеш состояния, список исходящих сообщений, комиссии.

get-методы (например get fun balance()) — отдельный путь: они выполняются off-chain через RPC и не меняют состояние и не требуют газа от пользователя.


Частые ошибки

Путать get-методы и receiveget только читает; запись состояния — только через сообщения (receive / транзакция).

Думать, что TVM «как EVM с другим синтаксисом» → другая модель памяти (ячейки), другая модель вызовов (сообщения, а не синхронный call в той же транзакции по умолчанию).

Игнорировать лимит газа → сложные циклы и большие структуры в ячейках легко упираются в gas; тестируй в sandbox до mainnet.


Что дальше

Материалы gramdocs.tech носят образовательный характер и не являются финансовой, юридической или инвестиционной рекомендацией. Работа с блокчейном TON и токеном Gram связана с рисками потери средств. Правовая информация