Qu'est-ce que la machine virtuelle TON (TVM) ? Guide complet (2026)

— By Tony Rabbit in Tutorials

Qu'est-ce que la machine virtuelle TON (TVM) ? Guide complet (2026)

La TVM est le moteur qui exécute chaque contrat intelligent TON. Ce guide explique le modèle de pile, le passage de messages asynchrone, la disposition des données basée sur des cellules, la mesure du gaz et comment la TVM se compare à l'EVM.

La TVM (machine virtuelle TON) est le moteur d'exécution qui exécute chaque contrat intelligent sur The Open Network. Elle est vraiment différente de l'EVM, de la SVM et d'autres machines virtuelles majeures, principalement parce que la philosophie de conception de TON est asynchrone : les contrats passent des messages au lieu de faire des appels de fonction synchrones. Comprendre la TVM fait la différence entre traiter le développement TON comme une boîte noire et écrire des contrats qui s'intègrent bien avec le parallélisme du réseau.

Réponse rapide : La TVM est une machine virtuelle basée sur une pile qui exécute des contrats intelligents TON. Elle utilise une disposition de données basée sur des cellules où tout est stocké sous forme de petits morceaux (jusqu'à 1023 bits) avec jusqu'à quatre références à d'autres cellules. L'exécution est asynchrone : un contrat reçoit un message, s'exécute jusqu'à la fin et peut émettre de nouveaux messages. Il n'y a pas d'appels synchrones entre les contrats. La mesure du gaz est par contrat par message, et le gaz non utilisé est remboursé.

  • Basé sur une pile. Les opérations poussent et retirent des valeurs d'une pile plutôt que d'adresser des registres.
  • Données basées sur des cellules. Le stockage utilise de petits morceaux appelés cellules avec jusqu'à quatre références chacune.
  • Exécution asynchrone. Les contrats communiquent par le biais de messages, pas d'appels synchrones.
  • Mesure du gaz par message. Chaque message porte son propre budget de gaz.
  • Les langages se compilent en bytecode TVM. FunC, Tact et d'autres ciblent tous le même niveau d'exécution.

Ce qu'est la TVM et pourquoi elle existe

La TVM est l'environnement d'exécution qui transforme le code des contrats intelligents en opérations réelles sur la chaîne. Chaque nœud du réseau s'accorde sur la spécification de la TVM, donc un contrat qui s'exécute sur un nœud s'exécute de manière identique partout. Ce déterminisme est ce qui permet au réseau d'atteindre un consensus sur les résultats des contrats.

Pourquoi une VM personnalisée

Les concepteurs de TON ont construit une VM personnalisée pour s'adapter à l'architecture shardée et asynchrone du réseau. Emprunter l'EVM aurait signifié accepter le modèle d'appel synchrone de l'EVM, qui contredit l'exécution parallèle des shards de TON. La TVM donne à TON un modèle où chaque message est une unité de travail qui peut s'exécuter dans n'importe quel shard à tout moment sans coordination avec d'autres shards.

Où elle se situe dans la pile

En dessous de la TVM se trouvent les comptes, le stockage et le consensus du réseau. Au-dessus de la TVM se trouvent les langages de contrat intelligent (FunC, Tact). La TVM est l'interface universelle : chaque langage se compile en bytecode TVM, et chaque nœud exécute ce bytecode.

Diagramme du modèle d'exécution basé sur une pile de la TVM avec pile, code de contrat et compteur de gaz
Visuel en ligne 1 : le modèle d'exécution de base de la TVM.

Cellules et disposition des données

Un des choix de conception emblématiques de la TVM est la cellule. Tout ce qui est stocké sur TON, de l'état du contrat aux corps de message en passant par les métadonnées NFT, est disposé sous forme d'un arbre de cellules.

Ce qu'est une cellule

Une cellule contient jusqu'à 1023 bits de données brutes et jusqu'à quatre références à d'autres cellules. Les objets plus grands (une longue chaîne, un grand tableau, un état de contrat complexe) sont représentés sous forme d'arbres de cellules. La structure est similaire en esprit à un arbre de Merkle.

Pourquoi les cellules sont importantes

La disposition des cellules prend en charge l'adressage par contenu (chaque cellule a un hachage), le diffing efficace (les changements ne modifient que les cellules affectées) et le calcul du loyer de stockage (le nombre de cellules et le temps comptent tous les deux). Les contrats à long terme paient un petit loyer basé sur le nombre de cellules qu'ils maintiennent en vie.

Loyer de stockage

Contrairement au stockage permanent d'Ethereum, TON facture une petite frais continu pour garder les cellules en vie. L'intention est de décourager le gonflement indéfini. Les contrats actifs ne paient presque rien ; les contrats abandonnés qui détiennent un état important paient plus, finissant par être gelés si leur solde atteint zéro.

Exécution asynchrone

La TVM ne permet pas au contrat A d'appeler le contrat B de manière synchrone. Au lieu de cela, le contrat A envoie un message au contrat B, qui est traité à une étape ultérieure.

Un message, une exécution

Chaque interaction sur la chaîne est déclenchée par un message. Le contrat destinataire lit le message, met à jour son état et peut émettre de nouveaux messages en tant qu'effet secondaire. Ces nouveaux messages seront traités lors des tours de réseau suivants.

Implications pour les développeurs

Les développeurs habitués aux appels synchrones de style EVM doivent penser différemment sur TON. Une "transaction" sur TON est souvent une chaîne de messages. La gestion des erreurs est également différente : un message qui rebondit renvoie des fonds à l'expéditeur, mais seulement si l'expéditeur a configuré le message comme rebondissable.

Implications pour le parallélisme

Le modèle asynchrone est ce qui permet à TON d'exécuter des chaînes de shards en parallèle. Deux shards peuvent traiter des messages non liés sans coordination, et même les messages entre shards sont mis en file d'attente et résolus lors de tours ultérieurs.

Maquette IDE montrant le code de contrat TON avec des instructions TVM, un instantané de pile et des panneaux de file de messages
Visuel en ligne 2 : une vue typique d'un IDE conscient de la TVM.

Mesure du gaz sur TON

Chaque opération de la TVM a un coût en gaz. Le système de coûts est similaire en esprit à celui du gaz d'Ethereum, avec quelques différences importantes.

Gaz par message

Chaque message entrant porte sa propre allocation de gaz. Lorsque le message est traité, le gaz est consommé par les opérations exécutées. Le gaz non utilisé est remboursé à l'expéditeur avec tout solde TON non utilisé.

Loyer de stockage vs gaz de calcul

TON facture séparément pour le loyer de stockage (stockage de cellules à long terme) et le gaz de calcul (travail effectué par la TVM). Les deux sont payés en TON. Pour la plupart des contrats destinés aux utilisateurs, le gaz de calcul est le coût le plus élevé.

Pourquoi les frais restent bas

Les frais restent bas car le réseau peut évoluer grâce au sharding lorsque la demande augmente. La plupart des exécutions de contrats sont peu coûteuses, prévisibles et remboursables lorsqu'elles sont surestimées.

Maquette de trace d'exécution TVM montrant les instructions exécutées, les changements de pile et les messages résultants
Visuel en ligne 3 : une vue typique d'une trace d'exécution TVM.

TVM vs EVM

Les deux moteurs résolvent le même problème avec des mécanismes différents.

PropriétéTVMEVM
ArchitectureBasée sur une pileBasée sur une pile
Disposition des donnéesCellules (1023 bits + 4 refs)Stockage adressé par mot
Modèle d'exécutionMessages asynchronesAppels synchrones
Remboursement de gazOui, non utilisé rembourséOui, remboursement partiel
Coût de stockageLoyer de stockageCoût de stockage permanent à l'avance
LangagesFunC, TactSolidity, Vyper, Yul
Infographie comparant la TVM et l'EVM sur le modèle d'exécution, la disposition des données, la mesure du gaz et le support des langages
Visuel en ligne 4 : comment la TVM se compare à l'EVM.

Ce que cela signifie pour les développeurs

Construire sur TON nécessite un modèle mental différent de celui de la construction sur Ethereum ou Solana.

Pensez en messages, pas en appels de fonction

Si vous vous retrouvez à vouloir "le résultat du contrat B" à l'intérieur du contrat A, vous combattez généralement le modèle. Restructurez le flux pour que le contrat A envoie un message à B et s'attende soit à un rappel, soit à compléter son propre changement d'état sans attendre.

Pensez en cellules lors du stockage de l'état

Les grands tableaux plats ne sont pas adaptés à TON. Les structures de données en forme d'arbre s'intègrent mieux à la disposition des cellules. L'état qui croît de manière illimitée doit être partitionné entre plusieurs cellules ou sous-contrats.

Utilisez Tact pour une syntaxe plus conviviale

FunC est plus proche de l'assemblage. Tact fournit une syntaxe de niveau supérieur qui se compile en bytecode TVM et est plus facile à lire. La plupart des nouveaux projets TON utilisent Tact à moins qu'ils n'aient besoin d'un contrôle précis.

Illustration en quatre panneaux des concepts de la TVM : structure de données des cellules, messages asynchrones, mesure du gaz, remboursement de gaz
Visuel en ligne 5 : les quatre concepts clés de la TVM que chaque développeur devrait intérioriser.

Un parcours d'apprentissage pratique

  1. Commencez par des tutoriels Tact. Une syntaxe de niveau supérieur vous aide à saisir d'abord le modèle de message.
  2. Lisez une implémentation de Jetton. Les contrats de maître et de portefeuille illustrent clairement le modèle asynchrone.
  3. Construisez un petit contrat sur testnet. Envoyez des messages, observez comment ils se propagent.
  4. Descendez à FunC lorsque vous devez optimiser le gaz ou peaufiner la disposition des cellules.
  5. Utilisez un outil de trace d'exécution TVM pour inspecter la pile et les messages pendant le développement.

Questions fréquemment posées

La TVM est-elle compatible avec l'EVM ?

Non. Les modèles d'exécution, les dispositions de données et les systèmes de gaz sont différents. Certaines couches de compatibilité EVM expérimentales existent mais ne sont pas le chemin de développement par défaut.

Puis-je écrire des contrats TON en Solidity ?

Le développement natif TON utilise FunC ou Tact. Certains adaptateurs permettent une syntaxe similaire à Solidity, mais la plupart du code de production utilise les langages natifs de TON.

Pourquoi la TVM est-elle basée sur une pile ?

Les VM basées sur une pile sont plus simples à spécifier et à vérifier que les VM basées sur des registres, et elles facilitent la conception de modèles de gaz déterministes. L'EVM est également basée sur une pile pour les mêmes raisons.

Qu'est-ce qu'une cellule sur TON ?

L'unité de base de données sur TON. Une cellule contient jusqu'à 1023 bits et jusqu'à quatre références à d'autres cellules. Tout ce qui est stocké sur TON est disposé sous forme d'un arbre de cellules.

Puis-je payer un loyer pour stocker des données sur TON ?

Oui. Le loyer de stockage est une petite frais continu proportionnel au nombre de cellules et au temps. Les contrats actifs le remarquent à peine ; les contrats abandonnés peuvent se vider jusqu'à zéro et geler.

Conclusion finale : La TVM est la pièce la plus distinctive de la conception de TON. Une fois que vous comprenez la disposition des cellules, le modèle de message asynchrone et le système de gaz par message, le reste des particularités du réseau (sharding, frais bas, finalité rapide) a du sens comme conséquences naturelles. Construisez avec le modèle, pas contre lui.

Avertissement : Ce guide est à des fins éducatives uniquement et ne constitue pas un conseil en investissement, financier, juridique ou commercial.