К основному содержанию
T TON Adoption
← Словарь
NODE/03 · Term

TVM (TON Virtual Machine)

Виртуальная машина TON — стековая среда исполнения смарт-контрактов. Работает с ячейками (cells) и асинхронными сообщениями как примитивами.

Синонимы: ton virtual machine, виртуальная машина ton

TVM (TON Virtual Machine) — среда выполнения смарт-контрактов в сети TON. Это стековая виртуальная машина с поддержкой произвольно вложенных структур данных — концептуально она ближе к Forth, чем к EVM.

Чем отличается от EVM

Ethereum Virtual Machine оперирует 256-битными словами и плоской памятью. TVM работает на другом уровне абстракции:

  • Стек значений хранит не только числа, но и ячейки, slice-ы, builder-ы, продолжения (continuation), словари.
  • Cell — основная структура данных. До 1023 бит и до 4 ссылок на другие ячейки. Любые сериализованные данные в TON — это дерево или граф ячеек.
  • Сообщения как примитив. Контракты в TON не вызывают друг друга синхронно. Любое взаимодействие — это асинхронное сообщение, и TVM умеет создавать такие сообщения встроенными опкодами.

Газ и комиссии

Каждый опкод TVM имеет цену в газе. Контракт оплачивает газ из собственного баланса (отличие от EVM, где газ оплачивает отправитель). Если на счету не хватает Toncoin для оплаты вычислений и хранения, контракт может «замёрзнуть» (frozen state) и потеряет данные через какое-то время, если не пополнить баланс.

Стоимость газа в TON стабильно низкая — типичный перевод Toncoin или jetton-а укладывается в 0,005-0,02 TON.

Что внутри контракта

Состояние смарт-контракта в TVM — это тоже cell. У каждого аккаунта есть:

  • Code cell — байткод TVM.
  • Data cell — текущее состояние (балансы, владелец, любые поля).
  • Library cell — опционально, для разделяемого кода между контрактами одного класса (типичный кейс — jetton wallet).

При входящем сообщении TVM загружает code и data, исполняет код, выдаёт обновлённый data и список исходящих сообщений. Если что-то пошло не так — контракт может откатить транзакцию через bounce-механизм (см. термин bounce).

Языки разработки

Прямо на байткоде TVM никто не пишет. Используются языки уровнем выше:

  • FunC — низкоуровневый, близок к C, дает максимальный контроль и эффективность.
  • Tact — высокоуровневый, со строгой типизацией и более привычным синтаксисом.
  • Fift — ассемблер TVM, нужен для отладки и оптимизаций.

Все они компилируются в один и тот же байткод TVM, который потом исполняется валидаторами при обработке транзакций.

См. также