La Máquina Virtual de The Open Network (TVM) es la infraestructura que ejecuta contratos inteligentes y procesa mensajes dentro de la red TON, garantizando determinismo y compatibilidad retroactiva.
Descripción general#
TVM actúa como una máquina de pila que recibe mensajes, actualiza datos persistentes y genera nuevos mensajes. Sus requisitos incluyen soporte para extensiones futuras, alta densidad de código y ejecución determinista.
Historia y evolución#
- La primera versión de TVM fue desarrollada por el equipo de Telegram en 2018 y lanzada junto a la testnet de TON.
- En marzo de 2020 se publicó una documentación técnica detallada que describía el soporte de tipos de datos y optimizaciones.
- La red principal se activó en 2020, momento en que TVM ya soportaba operaciones más complejas y ejecución totalmente determinista.
Componentes básicos#
Notaciones y serialización
TVM representa datos en notaciones hexadecimales y en secuencias de octetos, ajustando la longitud para que sea múltiplo de 4 o 8 bits según corresponda.
Modelo de pila
Como máquina de pila, TVM almacena valores en una estructura LIFO; las operaciones aritméticas y de manipulación de datos operan directamente sobre esta pila.
Tipos de valores
- Integer: enteros con signo de 257 bits.
- Cell: contenedores de hasta 1023 bits y 4 referencias.
- Tuple, Slice, Builder, Continuation, Null: tipos auxiliares para estructurar y ejecutar código.
Instrucciones
Las instrucciones se agrupan en primitivas de pila y tuplas, constantes, aritméticas, de celdas, de control de flujo y personalizadas, permitiendo construir lógica compleja dentro de la VM.
Celdas de TVM#
Las celdas son unidades de almacenamiento persistente; cada una puede contener datos y referencias, formando un grafo acíclico dirigido (DAG). Existen celdas normales y celdas exóticas con tipos especiales.
Continuaciones y control de flujo#
Las continuaciones almacenan el estado de ejecución y permiten llamadas a subrutinas, bucles y manejo de excepciones mediante instrucciones como JMP y RET. Existen continuaciones normales, simples y actuales, cada una con diferentes niveles de información almacenada.
Páginas de código#
Cada continuación incluye un campo de 16 bits que indica la página de código a usar, facilitando la compatibilidad entre distintas versiones de TVM y permitiendo cambios automáticos de codificación según la operación.
Comparación con la EVM#
- Estructura de datos: TVM usa celdas (hasta 128 bytes) y grafos DAG, mientras que la EVM emplea Merkle Patricia Trie y enteros de 256 bits.
- Seguridad aritmética: TVM verifica automáticamente desbordamientos; en la EVM esta verificación debe implementarse manualmente.
- Criptografía: TVM soporta Curve25519, emparejamientos Weil y SHA‑256; la EVM utiliza secp256k1 y Keccak‑256.
- Lenguaje: TVM se programa principalmente con FunC, a diferencia de Solidity en la EVM.
Enlaces externos#
Véase también#
- TVM Challenge 2023
- TON Sharding
- TON Connect