TONboard

TON Virtual Machine (TVM)

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

TON Virtual Machine (TVM, às vezes TON VM) — máquina virtual que executa contratos inteligentes na blockchain TON. É a camada de execução da rede: cada smart-contract é armazenado e funciona como um programa para a TVM. A máquina processa mensagens de entrada, altera o estado permanente do contrato e gera mensagens de saída para outros contratos.

A arquitetura da TVM está subordinada a três requisitos: total determinismo de execução (a mesma entrada produz o mesmo resultado em qualquer nó), alta densidade de código (mínimo de espaço na blockchain) e compatibilidade retroativa ao expandir o conjunto de instruções.

História#

A TVM foi desenvolvida pela equipe do Telegram em 2018 junto com a primeira versão do protocolo TON. O desenvolvimento ocorreu em etapas:

  • 2018 — primeira versão da TVM, lançada com a rede de teste TON. Foco principal — funcionalidade de contratos inteligentes e integração com o protocolo.
  • Março de 2020 — publicação de documentação técnica detalhada descrevendo tipos de dados, otimizações e conjunto de instruções.
  • 2020 (lançamento da mainnet) — a TVM suporta um conjunto completo de operações e garante execução determinística na rede de produção.

Após a transferência do projeto para a comunidade, o desenvolvimento da TVM continua através do processo TEP — atualizações são introduzidas por propostas de melhoria e ativadas pelo consenso dos validadores.

Conceitos básicos#

A TVM usa cadeias de bits como representação fundamental de dados. Elas são apresentadas em duas notações:

  • Representação hexadecimal — cadeias com comprimento múltiplo de quatro bits, divididas em grupos de 4 bits, cada um representado por um dígito hexadecimal (0–F). Se o comprimento não for múltiplo de quatro, um marcador especial de término é adicionado para indicar a modificação.
  • Serialização em octetos — a cadeia é dividida em grupos de 8 bits e escrita como sequência de bytes; se necessário, há alinhamento até 8.

Modelo de pilha#

A TVM é uma máquina virtual baseada em pilha. Isso significa que os dados são armazenados em uma estrutura de “pilha” (last-in-first-out), e não em variáveis nomeadas ou registradores. A maioria das operações (aritmética, comparações, passagem de parâmetros) retira argumentos da pilha e coloca o resultado de volta nela. O modelo de pilha simplifica o design em relação ao modelo baseado em registradores e permite codificação de instruções mais densa — essencial para reduzir o armazenamento on-chain.

Tipos de valores

A pilha da TVM trabalha com um conjunto fixo de tipos primitivos:

  • Integer — inteiro assinado de 257 bits (a escolha da largura permite acomodar hashes de 256 bits mais o sinal sem perdas).
  • Cell — objeto que contém até 1023 bits de dados e até 4 referências a outras cells. Base da memória da TVM.
  • Tuple — coleção ordenada de valores de tipos diferentes.
  • Slice — “fatia” de uma cell: ponteiro para a parte restante dos dados e referências durante a leitura.
  • Builder — buffer para construção sequencial de uma nova Cell.
  • Continuation — representação de um ponto de continuação da execução; veja abaixo.
  • Null — ausência de valor; marcador para campos não inicializados.

Categorias de instruções

As instruções da TVM são agrupadas por finalidade:

  • pilha e tupla — permutações da pilha, operações com tuple;
  • constantes — inserção de valores predefinidos na pilha;
  • aritméticas — operações aritméticas padrão com verificação automática de overflow;
  • operações com cells — leitura de Slice, escrita de Builder, navegação por referências;
  • controle de fluxo — ramificações condicionais, loops, chamadas de continuations;
  • primitivas de aplicação — operações especializadas do TON: manipulação de endereços, assinaturas, atuadores de mensagens.

Cells e seus tipos#

Cell — unidade atômica de armazenamento na TVM e na própria blockchain TON. Cada Cell contém até 1023 bits de dados e até 4 referências a outras Cells. O grafo de cells formado pelas referências é um grafo direcionado acíclico (DAG): ciclos são proibidos. Qualquer dado da blockchain (contratos inteligentes, estados, mensagens, blocos) é armazenado como esse grafo.

Tipos de cells

  • Comuns (tipo‑1) — transportador padrão de dados e referências.
  • Exóticas (exotic cells) — tipos 2–255 com particularidades de desserialização e hashing. São usadas para ramos truncados (truncated branches), referências a bibliotecas e provas Merkle.

Cells exóticas permitem, por exemplo, transmitir um snapshot parcial da blockchain com provas criptográficas — base dos clientes leves do TON.

Continuations#

Continuation — construção central da TVM para controle de fluxo. Essencialmente é um “cálculo diferido”: um marcador que contém código a ser executado, a pilha atual e o estado salvo dos registradores de controle. Uma continuation pode ser colocada na pilha, passada como parâmetro, ativada — e a execução continua a partir do ponto registrado.

Sobre continuations são construídas chamadas de sub‑rotinas, operações condicionais, loops e tratamento de exceções. O análogo em linguagens mais familiares são funções de primeira classe; na TVM a continuation é ainda mais poderosa, abrangendo também continuação parcial do programa.

Tipos de continuations

  • Normais — contêm código, pilha, lista de registradores salvos e code page (veja abaixo).
  • Simples — apenas código e code page, sem dados de pilha salvos.
  • Current (cc, current continuation) — reflete o código que está sendo executado no momento; parte chave do estado da máquina.

A troca entre continuations ocorre por instruções JMP (salto) e RET (retorno). Exceções são continuations especiais ativadas em caso de erro: recebem parâmetros de erro e definem o comportamento subsequente. Construções condicionais e iterativas (IF, WHILE, REPEAT) são implementadas sobre continuations.

Code pages#

Cada continuation normal carrega um campo de 16 bits chamado code page (cp), que determina como decodificar suas instruções. Esse mecanismo garante compatibilidade retroativa: diferentes contratos compilados para versões distintas do conjunto de instruções da TVM podem coexistir na rede.

Instruções são codificadas com um código de prefixo binário — isso permite decodificação unívoca e representação densa. Se o prefixo não corresponder a uma instrução válida na code page atual, uma exceção de opcode inválido é gerada.

Entre code pages pode ocorrer troca automática dependendo da operação executada — isso permite especializar pages para operações frequentes (manipulação de pilha, processamento de dados) e reduzir o volume de código.

TVM vs Ethereum Virtual Machine#

TVM e EVM — ambas são máquinas virtuais baseadas em pilha para contratos inteligentes, mas apresentam diferenças fundamentais.

PropriedadeTVMEVM
Modelo de dados baseGrafo de cells (Cell, até 1023 bits + 4 referências)Palavras de 256 bits + Merkle Patricia Trie
Dimensão do Integer257 bits256 bits
Verificação de overflowAutomáticaManual (Solidity ≥0.8)
CriptografiaCurve25519, Weil pairings (zk‑SNARKs), sha256secp256k1, keccak256
Linguagem principal de contratosFunC (tipagem estática, ADT)Solidity
Armazenamento de estadoDistribuído em cells de contratosMPT com estado global

O grafo de cells simplifica o trabalho com estruturas complexas (árvores, DAG), requer menos memória e recursos computacionais que o MPT. A verificação automática de overflow reduz a classe de vulnerabilidades típicas. O suporte a Curve25519 e Weil pairings oferece recursos criptográficos indisponíveis no EVM “de fábrica”.

Ver também#

ℹ️ Informação 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.