TONboard

TON Virtual Machine (TVM)

4 min readupdated 2026-06-06✏️ Suggest an edit🕑 History
On this page (13)

TON Virtual Machine (TVM, іноді TON VM) віртуальна машина, що виконує смарт-контракти в блокчейні TONЦе виконавчий шар мережі: кожен смарт-контракт Машина обробляє вхідні повідомлення, змінює постійний стан контракту і формує вихідні повідомлення для інших контрактів.

Архітектура TVM підпорядкована трьом вимогам: повна детермінативність виконання (один і той самий вхід дає один і той же результат на будь-якому вузлі), висока щільність коду (мінімум місця в блокчейні) і зворотна сумісність при розширенні набору інструкцій.

Історія#

TVM була розроблена командою Telegram у 2018 році разом з першою версією протоколу TON.:

  • 2018 перша версія TVM, випущена з тестовою мережею TON. Основна увага функціональність смарт-контрактів і інтеграція з протоколом.
  • Март 2020 публікація детальної технічної документації з описом типів даних, оптимізації та контрактної інструкції.
  • 2020 (запуск mainnet) TVM підтримує повноцінний набір операцій і забезпечує детермінований виконання в production-мережі.

Після передачі проекту спільноті розробка TVM продовжується через TEP-процес оновлення вводяться через пропозиції поліпшень і активуються через консенсус валідаторів.

Основи#

TVM використовує бітові рядки як фундаментальне представлення даних.

  • Шістнадцятизначне позначення рядки довжиною, помноженою на чотири біти, діляться на групи по 4 біта, кожна записується однією шістнадцятирічною цифрою (0F).
  • Серіалізація в октати ряд ділиться на групи по 8 бітів і записується як послідовність байтів; при необхідності додається вирівнювання до 8.

Структура стеку#

TVM є стековою віртуальною машиною. Це означає, що дані зберігаються в структурі стек (last-in-first-out), а не в названих змінних або реєстрах. Більшість операцій (арифметика, порівняння, передача параметрів) беруть аргументи з стеку і кладуть результат туди ж. Стекова модель простіша за реєстральний підхід і дає більш щільне кодування інструкцій важливо для зменшення on-chain зберігання.

Типи значень

TVM стек працює з фіксованим набором примітивних типів:

  • Integer 257-бітний знаковий цілий (вибір розрядності дозволяє вмістити 256-бітні хэші плюс знак без втрат).
  • Cell об'єкт, що містить до 1023 бітів даних і до 4 посилань на інші ячелки.
  • Tuple організована колекція значень різних типів.
  • Slice поміж ячеек: вказує на решту даних і посилання при читанні.
  • Builder буфер для послідовної збірки нової Cell.
  • Continuation представлення точки продовження виконання; см. нижче.
  • Null відсутність значення; маркер для неініціалізованих полів.

Категорії інструкцій

Інструкції TVM групуються за призначенням:

  • стекові та кортежні перестановки стеку, операції з tuple;
  • константні вставка передбачених значень на стек;
  • арифметичні стандартні арифметичні операції з автоматичною переповненням;
  • операції з ячейками читає Slice, записує Builder, звертається за посиланнями;
  • управління потоком умовні розгалуження, цикли, виклики продовжень;
  • прикладні примітиви спеціалізовані операції TON: робота з адресами, підписами, актуатором повідомлень.

Одиниці та їх типи#

Клітка (Cell) атомна одиниця зберігання в TVM і в самій блокчейні TON. Кожна Cell містить до 1023 бітів даних і до 4 посилань на інші Cell. Граф клітин, що утворюється через посилання, орієнтований ациклічний граф (DAG): цикли недопустимі. Будь-які дані блокчейна (смарт-контракти, стани, повідомлення, блоки) зберігаються як такий граф.

Типи ячеек

  • Звичайні (тип-1) стандартний носій даних і посилань.
  • Екзотичні (exotic cells) типи 2–255Використовуються для обрізаних гілок (truncated branches), посилань на бібліотеки і доказів Merkle.

Екзотичні клітини дозволяють, наприклад, передавати частковий снімк блокчейна з криптографічними доказами бази легких клієнтів TON.

Продовження (Continuations)#

Continuation центральна конструкція TVM для управління потоком. По суті це відкладене обчислення: маркер, що містить код для виконання, поточний стек і збережений стан контрольних реєстрів. Continuation можна покласти на стек, передати як параметр, активізувати і продовжити виконання з фіксованої точки.

На continuation побудовані виклики підпрограм, умовні операції, цикли і обробка виняток. Аналог у більш звичних мовах first-class functions; у TVM continuation потужніший і охоплює також неповний продовження програми.

Типи продовжень

  • Звичайні містять код, стек, список збережених реєстрів і кодну сторінку (див. нижче).
  • Прості лише код і сторінка коду, без збережених даних стеку.
  • Текуче (cc, current continuation) відображає код, який зараз виконується; ключова частина стану машини.

Управління переключається між продовженнями інструкціями JMP (передача управління) і RET (повернення). Винятки спеціальні продовження, що активуються при помилці: вони отримують параметри помилки і визначають подальшу поведінку. Умовні та ітераційні конструкції (IF, WHILE, REPEAT) реалізовані над continuations.

Кодові сторінки#

Кожне звичайне продовження несе 16-бітне поле кодової сторінки (cp), яке визначає, як декодувати його інструкції.

Інструкції кодуються двоічним префіксом це дає однозначне декодування і щільне представлення. Якщо префікс не відповідає допустимій інструкції поточної кодної сторінки, генерується виключення недопустимого опкоду.

Між кодовими сторінками можливе автоматичне переключення в залежності від виконаної операції це дозволяє спеціалізувати сторінки під часті операції (маніпуляції зі стеком, обробка даних) і скоротити обсяг коду.

TVM vs Ethereum Virtual Machine#

TVM і EVM обидві стекові віртуальні машини для смарт-контрактів, але мають ключові відмінності.

СвойствоTVMEVM
Базова модель данихГраф ячеек (Cell, до 1023 біт + 4 посилання)256-бітні слова + Merkle Patricia Trie
Розмір Integer257 бітів256 бітів
ПереповненняАвтоматичнаРучна (Solidity ≥0.8)
КриптографіяCurve25519, Weil pairings (zk-SNARKs), sha256secp256k1, keccak256
Основна мова контрактівFunC (статична типіфікація, ADT)Solidity
Збереження стануРозподілено за ячейками контрактівMPT з глобальним станом

Граф клітин спрощує роботу з складними структурами (дерева, DAG), вимагає менше пам'яті і обчислювальних ресурсів, ніж MPT. Автоматична переповнення перевіряє знижує клас типових вразливостей. Підтримка Curve25519 і Weil pairings дає криптографічні можливості, недоступні в EVM з коробки.

Подібні статті#

️ Потрібно підтвердити#

-: дати етапів розробки TVM (2018 перша версія, березень 2020 документація, 2020 mainnet) потрібні точні дати публікацій. -: приклади FunC-коду не приведені користь для розробника стаття дала б більше з мінімальним hello world сніпетом.

ℹ️ Information verified: 2025

Prepared by

TONboard

Support the project with a TON tip.

Comments

Posting a comment costs a small on-chain fee that keeps spam out.
  • No comments yet — be the first.