TONboard

TON Virtual Machine (TVM)

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

TON Virtual Machine (TVM, parfois TON VM) une machine virtuelle qui exécute des contrats intelligents dans la blockchain TONC' est la couche exécutive du réseau: chaque Un contrat intelligent La machine traite les messages entrants, modifie l'état permanent du contrat et forme les messages sortants pour les autres contrats.

L'architecture TVM est soumise à trois exigences: une détermination complète de l'exécution (une même entrée donne le même résultat sur n'importe quel nœud), une densité de code élevée (un minimum d'espace dans la blockchain) et une compatibilité inverse lors d'un élargissement du jeu d'instructions.

Le récit#

TVM a été développé par l'équipe de Telegram en 2018 avec la première version du protocole TON.:

  • 2018 la première version de TVM publiée avec le réseau de test TON.
  • Le mois de mars la publication d'une documentation technique détaillée décrivant les types de données, les optimisations et le contrat d'instructions.
  • 2020 (démarrage du mainnet) TVM prend en charge un ensemble complet d'opérations et assure une exécution déterminée dans le réseau de production.

Une fois le projet transmis à la communauté, le développement de TVM se poursuit via le processus TEP les mises à jour sont introduites via des propositions d'amélioration et activées via le consensus des validateurs.

Les fondements#

TVM utilise les lignes de bits comme représentation fondamentale des données.

  • Indication à seize chiffres les lignes de longueur multipliées par quatre bits sont divisées en groupes de 4 bits, chacune étant écrite par un chiffre de seize (0F).
  • Sérialisation en octets la ligne est divisée en groupes de 8 bits et est écrite comme une séquence de bytes; si nécessaire, l'alignement jusqu'à 8 est ajouté.

Modèle de pile#

TVM est une machine virtuelle en pile. Cela signifie que les données sont stockées dans une structure stek (last-in-first-out), et non dans des variables ou des registres nommés. La plupart des opérations (arithmétique, comparaisons, transmission de paramètres) prennent des arguments de la pile et y placent le résultat.

Types de valeurs

Le stack TVM fonctionne avec un ensemble fixe de types primitifs:

  • Integer 257 bits de signes entiers (le choix de la décomposition permet d'accueillir des hashs de 256 bits plus un signe sans perte).
  • Cell un objet contenant jusqu'à 1023 bits de données et jusqu' à 4 liens vers d'autres cellules.
  • Tuple une collection ordonnée de valeurs de différents types.
  • Slice à travers les cellules: indique le reste des données et des liens lors de la lecture.
  • Builder une mémoire tampon pour assembler une nouvelle cellule en séquence.
  • Continuation la présentation du point de continuation de l'exécution; voir ci-dessous.
  • Null absence de valeur; marqueur pour les champs non initialisés.

Catégories d'instructions

Les instructions TVM sont regroupées selon leur fonction:

  • des bâtiments de charpente et de corniche les opérations de remplacement de la pile, les opérations avec le tuple;
  • Ils sont constants. insérer des valeurs prédéfinies dans la pile;
  • les chiffres les opérations arithmétiques standard avec vérification automatique du remplissage;
  • Opérations avec cellules lire Slice, enregistrer Builder, les appels par liens;
  • gérer le flux les ramifications conditionnelles, les cycles, les appels à la suite;
  • les primitifs appliqués opérations spécialisées TON: travail avec les adresses, les signatures, l'actuateur de messages.

Cellules et types#

Une cellule (Cell) est une unité de stockage atomique dans TVM et dans la blockchain TON elle-même. Chaque Cell contient jusqu'à 1023 bits de données et jusqu' à 4 liens vers d'autres Cell.

Types de cellules

  • Généraux (type-1) le support standard de données et de liens.
  • Les cellules exotiques types 2–255Ils sont utilisés pour les branches tronquées, les références aux bibliothèques et les preuves Merkle.

Les cellules exotiques permettent, par exemple, de transmettre un instantané partiel de la blockchain avec des preuves cryptographiques base de clients légers TON.

Je suis désolé.#

Continuation est une structure centrale de TVM pour gérer le flux. Il s'agit essentiellement d'un marqueur contenant le code à exécuter, le stack actuel et l'état enregistré des registres de contrôle.

La continuation est basée sur les appels de sous-programmes, les opérations conditionnelles, les cycles et le traitement des exceptions.

Types de séquences

  • Les habituelles contiennent le code, la pile, la liste des registres enregistrés et la page de code (voir ci-dessous).
  • Les plus simples seulement le code et la page de code, sans les données stockées de la pile.
  • Le courant (cc, current continuation) représente le code en cours d'exécution; une partie clé de l'état de la machine.

La commande est basculée entre les instructions JMP (transmission de commande) et RET (retour). Les exceptions sont les continuations spéciales activées en cas d'erreur: elles reçoivent les paramètres de l'erreurs et déterminent le comportement ultérieur.

Pages de code#

Chaque continuation ordinaire porte un champ de page de code (cp) de 16 bits qui détermine comment décoder ses instructions.

Les instructions sont codées par un préfixe binaire , ce qui donne un décodage unique et une représentation dense. Si le prefixe ne correspond pas à l'instruction admissible de la page de code en cours, une exception de l'opcode inadmissible est générée.

Il est possible de basculer automatiquement entre les pages de code en fonction de l'opération effectuée cela permet de spécialiser les pages pour des opérations fréquentes (manipulation de la pile, traitement des données) et de réduire le volume du code.

TVM vs Ethereum Virtual Machine#

TVM et EVM sont toutes deux des machines virtuelles en pile pour les contrats intelligents, mais elles présentent des différences clés.

PropriétéTVMEVM
Modèle de données de baseGraphe de cellules (Cell, jusqu'à 1023 bits + 4 liens)Des mots de 256 bits + Merkle Patricia Trie
Taille entière257 bits256 bits
Vérification de la surchargeAutomatiqueÀ la main (Solidity ≥ 0,8)
La cryptographieCurve25519, Weil pairings (zk-SNARKs), sha256secp256k1, keccak256
Langue de base des contratsFunC (typisation statique, ADT)Solidity
Enregistrer l'étatRépartis par cellules de contratsMPT avec état global

Le graphe de cellules simplifie le travail avec des structures complexes (arbres, DAG), nécessite moins de mémoire et de ressources informatiques que MPT. La vérification automatique du surchargement réduit la classe de vulnérabilités typiques. La prise en charge de Curve25519 et Weil pairings donne des capacités cryptographiques inaccessibles dans EVM out of the box.

Articles similaires#

️ Demande une confirmation#

-: les dates des étapes de développement de TVM (2018 première version, mars 2020 documentation, 2020 mainnet) besoin de dates de publication précises. -: les exemples de code FunC ne sont pas fournis utilité pour le développeur l'article aurait donné plus avec un minimum de hello world snippet.

ℹ️ 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.