TONboard

TON Virtual Machine (TVM)

6 min readupdated 2026-06-03✏️ Suggest an edit🕑 History
🌐 Машинный перевод. Возможны неточности.
On this page (12)

TON Virtual Machine (TVM, a veces TON VM) — máquina virtual que ejecuta contratos inteligentes en la blockchain TON. Es la capa ejecutora de la red: cada smart contract se almacena y funciona como un programa para TVM. La máquina procesa mensajes entrantes, modifica el estado permanente del contrato y genera mensajes salientes para otros contratos.

La arquitectura de TVM está sujeta a tres requisitos: total determinismo de ejecución (la misma entrada produce el mismo resultado en cualquier nodo), alta densidad de código (mínimo espacio en la blockchain) y compatibilidad retroactiva al ampliar el conjunto de instrucciones.

Historia#

TVM fue desarrollada por el equipo de Telegram en 2018 junto con la primera versión del protocolo TON. El desarrollo avanzó por etapas:

  • 2018 — primera versión de TVM, lanzada con la testnet de TON. Enfoque principal — funcionalidad de contratos inteligentes e integración con el protocolo.
  • Marzo 2020 — publicación de la documentación técnica detallada con descripción de tipos de datos, optimizaciones y conjunto de instrucciones.
  • 2020 (lanzamiento mainnet) — TVM soporta un conjunto completo de operaciones y garantiza ejecución determinista en la red de producción.

Tras la transferencia del proyecto a la comunidad, el desarrollo de TVM continúa a través del proceso TEP — las actualizaciones se introducen mediante propuestas de mejora y se activan mediante el consenso de los validadores.

Fundamentos#

TVM utiliza cadenas de bits como representación fundamental de datos. Se presentan en dos notaciones:

  • Representación hexadecimal — cadenas cuya longitud es múltiplo de cuatro bits, divididas en grupos de 4 bits, cada uno representado por un dígito hexadecimal (0–F). Si la longitud no es múltiplo de cuatro, se añade una etiqueta especial de terminación para marcar la modificación.
  • Serialización en octetos — la cadena se divide en grupos de 8 bits y se escribe como una secuencia de bytes; si es necesario, se agrega alineación hasta 8.

Modelo de pila#

TVM es una máquina virtual basada en pila. Esto significa que los datos se almacenan en una estructura de “pila” (last-in-first-out), no en variables nombradas o registros. La mayoría de las operaciones (aritmética, comparaciones, paso de parámetros) extraen argumentos de la pila y colocan el resultado allí mismo. El modelo de pila es más simple que el enfoque basado en registros y permite una codificación de instrucciones más densa — importante para reducir el almacenamiento on-chain.

Tipos de valores

La pila de TVM trabaja con un conjunto fijo de tipos primitivos:

  • Integer — entero con signo de 257 bits (la elección del ancho permite albergar hashes de 256 bits más el signo sin pérdidas).
  • Cell — objeto que contiene hasta 1023 bits de datos y hasta 4 referencias a otras cells. Base de la memoria de TVM.
  • Tuple — colección ordenada de valores de diferentes tipos.
  • Slice — “rebanada” de una cell: puntero a la parte restante de datos y referencias durante la lectura.
  • Builder — búfer para la construcción secuencial de una nueva Cell.
  • Continuation — representación de un punto de continuación de ejecución; ver más abajo.
  • Null — ausencia de valor; marcador para campos no inicializados.

Categorías de instrucciones

Las instrucciones de TVM se agrupan por propósito:

  • pilas y tuplas — permutaciones de la pila, operaciones con tuple;
  • constantes — inserción de valores predefinidos en la pila;
  • aritméticas — operaciones aritméticas estándar con verificación automática de overflow;
  • operaciones con cells — lectura de Slice, escritura de Builder, acceso a referencias;
  • control de flujo — bifurcaciones condicionales, bucles, llamadas a continuaciones;
  • primitivas de aplicación — operaciones especializadas de TON: manejo de direcciones, firmas, actuadores de mensajes.

Cells y sus tipos#

Cell — unidad atómica de almacenamiento en TVM y en la propia blockchain TON. Cada Cell contiene hasta 1023 bits de datos y hasta 4 referencias a otras Cell. El grafo de cells, formado mediante referencias, es un grafo dirigido acíclico (DAG): los ciclos no están permitidos. Cualquier dato de la blockchain (contratos inteligentes, estados, mensajes, bloques) se almacena como tal grafo.

Tipos de cells

  • Comunes (tipo‑1) — portador estándar de datos y referencias.
  • Exóticas (exotic cells) — tipos 2–255 con particularidades de deserialización y hashing. Se usan para ramas truncadas (truncated branches), referencias a bibliotecas y pruebas Merkle.

Las cells exóticas permiten, por ejemplo, transmitir un snapshot parcial de la blockchain con pruebas criptográficas — base de los clientes ligeros de TON.

Continuations#

Continuation es la construcción central de TVM para el control de flujo. En esencia es un “cálculo diferido”: marcador que contiene código a ejecutar, la pila actual y el estado guardado de los registros de control. Una Continuation puede colocarse en la pila, pasarse como parámetro, activarse — y continuar la ejecución desde el punto registrado.

Sobre continuations se construyen llamadas a subprogramas, operaciones condicionales, bucles y manejo de excepciones. El análogo en lenguajes más familiares son las first‑class functions; en TVM la continuation es más poderosa y también cubre continuaciones parciales del programa.

Tipos de continuations

  • Comunes — contienen código, pila, lista de registros guardados y una code page (ver más abajo).
  • Simples — solo código y code page, sin datos de pila guardados.
  • Current (cc, current continuation) — refleja el código que se está ejecutando en ese momento; parte clave del estado de la máquina.

El cambio entre continuations se realiza con las instrucciones JMP (salto) y RET (retorno). Las excepciones son continuations especiales activadas al producirse un error: reciben parámetros de error y determinan el comportamiento posterior. Las construcciones condicionales e iterativas (IF, WHILE, REPEAT) se implementan sobre continuations.

Code pages#

Cada continuation común lleva un campo de 16 bits llamado code page (cp), que define cómo decodificar sus instrucciones. Este es un mecanismo de compatibilidad retroactiva: simultáneamente en la red pueden coexistir contratos compilados para diferentes versiones del conjunto de instrucciones de TVM.

Las instrucciones se codifican con un código de prefijo binario — lo que permite una decodificación inequívoca y una representación compacta. Si el prefijo no corresponde a una instrucción válida de la code page actual, se genera una excepción de opcode inválido.

Entre code pages es posible el cambio automático según la operación ejecutada — lo que permite especializar páginas para operaciones frecuentes (manipulación de pila, procesamiento de datos) y reducir el tamaño del código.

TVM vs Ethereum Virtual Machine#

TVM y EVM son ambas máquinas virtuales basadas en pila para contratos inteligentes, pero presentan diferencias clave.

PropiedadTVMEVM
Modelo de datos baseGrafo de cells (Cell, hasta 1023 bits + 4 referencias)Palabras de 256 bits + Merkle Patricia Trie
Tamaño de Integer257 bits256 bits
Verificación de overflowAutomáticaManual (Solidity ≥0.8)
CriptografíaCurve25519, Weil pairings (zk‑SNARKs), sha256secp256k1, keccak256
Lenguaje principal de contratosFunC (tipado estático, ADT)Solidity
Almacenamiento de estadoDistribuido en cells de contratosMPT con estado global

El grafo de cells simplifica el trabajo con estructuras complejas (árboles, DAG), requiere menos memoria y recursos computacionales que MPT. La verificación automática de overflow reduce la clase de vulnerabilidades típicas. El soporte de Curve25519 y Weil pairings brinda capacidades criptográficas no disponibles en EVM “de fábrica”.

Ver tambiénVer también#

ℹ️ Información verificada: 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.