Se você olhar o código original do Bitcoin, verá algo que se assemelha a uma calculadora programável antiga: o Bitcoin Script. É uma linguagem baseada em pilha (stack-based), intencionalmente não Turing-completa. Satoshi Nakamoto desenhou dessa forma não por falta de visão, mas por um excesso de cautela em relação à segurança. Sem loops (laços de repetição), você elimina o risco de o código entrar em execução infinita e travar a rede. Era rudimentar, seguro e cumpria seu papel de movimentar valor de A para B. No entanto, a limitação da expressividade do Script frustrou desenvolvedores que viam na blockchain um potencial para lógica de negócios complexa. Foi essa frustração que deu origem ao Ethereum e, consequentemente, ao Solidity. A proposta era radical: uma linguagem Turing-completa que permitisse qualquer tipo de computação descentralizada.
A sintaxe foi modelada para lembrar JavaScript e C++, uma decisão estratégica para reduzir a barreira de entrada e atrair a massa de desenvolvedores web2. O problema é que a familiaridade sintática do Solidity mascarava perigos profundos. Programar dinheiro não é o mesmo que programar uma interface de usuário. O modelo mental da EVM (Ethereum Virtual Machine) introduziu vetores de ataque até então desconhecidos. O exemplo clássico, que ainda assombra a indústria, é o ataque de reentrância. No hack da The DAO em 2016, o atacante explorou uma função que enviava Ether antes de atualizar o saldo interno do contrato.
Como a chamada externa passava o controle do fluxo de execução para o contrato do atacante, ele podia chamar recursivamente a função de saque antes que o saldo fosse debitado. Esse incidente forçou uma evolução no design das linguagens. Percebeu-se que a flexibilidade total era uma faca de dois gumes. O foco começou a migrar da “facilidade de escrita” para a “segurança na execução” e a “previsibilidade”. Entramos então na era do Rust e das linguagens baseadas em tipos lineares. Blockchains como Solana e o ecossistema Cosmos adotaram o Rust não por ser fácil — a curva de aprendizado é brutal —, mas pelo seu sistema de ownership (propriedade) e gerenciamento de memória sem garbage collector.
O compilador do Rust impede classes inteiras de bugs antes mesmo que o código seja implantado. Na Solana, por exemplo, o modelo de programação exige que o desenvolvedor especifique todas as contas que serão acessadas numa transação, permitindo que o runtime (Sealevel) execute contratos em paralelo, algo impossível na arquitetura sequencial da EVM original. Mais recentemente, vimos o surgimento de linguagens desenhadas especificamente para a natureza dos ativos digitais, como o Move (nascido no projeto Libra/Diem e usado na Sui e Aptos). O Solidity trata tokens (como os ERC-20) essencialmente como entradas em uma tabela hash gigante: mapping(address => uint256). Se você subtrai de um e esquece de somar no outro, o dinheiro desaparece ou é inflacionado. O Move introduz o conceito de “recursos”.
Um token no Move é um objeto que, por definição da linguagem, não pode ser copiado ou descartado implicitamente; ele só pode ser movido de um local de armazenamento para outro. Isso impõe escassez digital no nível do compilador, reduzindo drasticamente a superfície para erros de tokenomics ou rug pulls acidentais. Não podemos ignorar a fronteira das provas de conhecimento zero (Zero-Knowledge Proofs). Linguagens como Cairo (StarkNet) e Noir exigem uma mudança paradigmática ainda maior. Aqui, não estamos escrevendo instruções para serem executadas passo-a-passo, mas definindo restrições matemáticas que geram uma prova de validade. Otimizar opcodes para a geração de provas ZK é um desafio de engenharia que está redefinindo o que significa “eficiência” em blockchain, priorizando o custo computacional da verificação sobre a execução. valorinveste.globo.com/mercados/noticia/2026/01/14/cvm-alerta-para-atuacao-irregular-de-grupo-que-reune-as-marcas-onil-onilx-3specht-e-aureum.ghtml