Turing completo: o que significa, por que o Ethereum precisava dele e por que o Bitcoin optou por evitá-lo.

Turing completo: o que significa, por que o Ethereum precisava dele e por que o Bitcoin optou por evitá-lo.

Um amigo que trabalha no setor financeiro tradicional me perguntou certa vez por que o Ethereum consegue executar aplicações financeiras inteiras em sua blockchain, enquanto o Bitcoin basicamente só consegue enviar dinheiro de um endereço para outro. "Ambas são blockchains", disse ele. "Qual é a diferença, afinal?"

Tentei explicar a completude de Turing e vi seus olhos se perderem no vazio. Então, tentei novamente com uma analogia. O Bitcoin é uma máquina de venda automática. Você coloca dinheiro, aperta um botão e recebe um item específico. Ela faz exatamente o que foi projetada para fazer e nada mais. O Ethereum é uma cozinha com um chef. Dê ao chef qualquer receita e ingredientes suficientes e ele poderá fazer qualquer coisa. Repetições ("mexer até engrossar"), decisões ("se estiver muito salgado, adicione água"), criatividade ("improvisar uma sobremesa com o que sobrou"). O chef pode seguir qualquer instrução. A máquina de venda automática não.

Essa analogia não é perfeita. Um cientista da computação apontaria vários detalhes que simplifiquei demais. Mas ela levou meu amigo a fazer a pergunta certa: "Então, por que alguém escolheria ser uma máquina de venda automática?"

Essa questão centraliza todo o debate sobre a completude de Turing no mundo das criptomoedas. Segurança versus flexibilidade. Previsibilidade versus poder computacional. Bitcoin versus Ethereum. E a resposta, infelizmente, é que ambos os lados têm razão.

De onde vem essa ideia e por que um artigo de matemática de 1936 ainda é relevante.

Alan Turing publicou um artigo intitulado "Sobre Números Computáveis" em 1936. Ele tinha 23 anos. Nele, descreveu uma máquina tão simples que parece um brinquedo. Uma fita dividida em células. Uma cabeça que lê e escreve símbolos. Regras que dizem à cabeça o que fazer com base no que ela lê. Fita, cabeça, regras. Essa é toda a máquina.

Eis a parte que ainda me arrepia. Turing provou que esta máquina ridiculamente simples pode computar qualquer coisa que qualquer computador jamais computará. Não algumas coisas. Qualquer coisa. Seu celular está realizando operações de fita e cabeçote neste exato momento. O servidor que executa o ChatGPT também. O chip do seu carro também. Ele provou tudo isso em 1936, antes mesmo de existir um único computador eletrônico na Terra. O artigo tem quase 90 anos e todos os departamentos de ciência da computação do planeta ainda o ensinam no primeiro semestre.

Quando alguém diz que um sistema é "Turing completo", significa que ele pode simular a máquina de fita de Turing. Ele pode executar loops, tomar decisões com base em dados, armazenar informações na memória e executar qualquer algoritmo. Seu laptop é Turing completo. Uma calculadora de bolso não é. E aqui vai uma curiosidade que adoro contar: os circuitos de Redstone do Minecraft são tecnicamente Turing completos. Algumas pessoas já construíram computadores funcionais dentro do jogo. Não computadores úteis, mas funcionais.

Turing completo

Como isso se reflete no Bitcoin: por que Satoshi escolheu a limitação

Satoshi criou o Bitcoin com uma linguagem de programação chamada Bitcoin Script, que é propositalmente simples. De propósito. Ela verifica assinaturas, gerencia carteiras com múltiplas assinaturas, bloqueia fundos com base em condições de tempo, e só. Sem loops. Sem ramificações complexas. Sem estado que seja transferido entre transações.

A primeira vez que entendi a importância disso foi quando li sobre o ataque ao DAO no Ethereum (falarei disso mais adiante). Uma chamada de função recursiva drenou US$ 150 milhões de um contrato inteligente porque o código podia chamar a si mesmo em um loop infinito que os desenvolvedores jamais previram. No Bitcoin, esse tipo de ataque é impossível. Não improvável. Impossível. O Bitcoin Script não pode chamar a si mesmo. Não pode entrar em loop. Não pode fazer recursão. A linguagem é muito limitada para expressar o tipo de bug que custou US$ 150 milhões ao Ethereum.

Essa limitação é a característica principal. Todo script Bitcoin termina de forma previsível. Você pode lê-lo e saber exatamente o que ele fará. Sem surpresas. Sem comportamentos inesperados. Quando se trata de proteger uma rede que vale mais de um trilhão de dólares, "chato e previsível" não é uma fraqueza. É uma escolha de projeto.

O que Vitalik construiu e por que isso mudou tudo

Vitalik Buterin tinha 19 anos quando publicou o white paper do Ethereum em 2013. Sua pergunta era simples e radical: e se a própria blockchain pudesse executar qualquer programa? Não apenas "enviar moedas de A para B", mas qualquer coisa que um computador possa fazer?

Eu estava na faculdade quando o whitepaper do Ethereum foi lançado. Li em um PDF que alguém compartilhou em um fórum de Bitcoin. Metade das respostas dizia que Vitalik era um gênio. A outra metade dizia que ele estava construindo um sistema que seria hackeado imediatamente. Ambos estavam certos.

O Ethereum foi lançado em 2015 com duas peças que o tornaram Turing completo. Solidity é a linguagem de programação para escrever contratos inteligentes. Ela possui loops, condicionais, armazenamento de estado e chamadas de função. Tudo o que você precisa. A Máquina Virtual Ethereum executa esses contratos em todos os nós da rede simultaneamente. Juntas, elas permitem que os desenvolvedores implementem qualquer código que possam escrever.

Essa decisão é o motivo da existência do DeFi. O motivo da existência dos NFTs. O motivo da existência das DAOs. O motivo pelo qual bilhões de dólares circulam por programas que nenhuma empresa controla individualmente. Todas as aplicações interessantes em criptomoedas, do Uniswap ao Aave e ao OpenSea, só são possíveis porque o Ethereum consegue executar código arbitrário.

Mas Vitalik fez uma aposta. Ele apostou que o poder da flexibilidade superaria o risco da complexidade. O ataque ao DAO em 2016 testou essa aposta duramente. Explorações de DeFi que custam bilhões todos os anos continuam a testá-la. E a comunidade Bitcoin continua apontando para essas perdas e dizendo "é por isso que mantivemos a simplicidade". Ambos os lados têm razão.

O problema das paradas e por que existem taxas de combustível.

Esta é a parte que me tirou o sono quando a entendi pela primeira vez.

Turing provou algo incômodo no mesmo artigo de 1936: nenhum algoritmo consegue analisar um programa qualquer e determinar com segurança se ele terminará de ser executado ou se entrará em um loop infinito. Este não é um problema tecnológico que ainda não resolvemos. É uma impossibilidade matemática. Provada. Concluída. Nenhum computador, por mais avançado que seja, consegue resolver o problema da parada para todos os programas.

No meu laptop, um loop infinito é irritante. Eu aperto Ctrl+C. A vida continua. Em uma blockchain, um loop infinito é catastrófico. Cada nó executa todos os contratos inteligentes. Se um contrato nunca termina, todos os nós do planeta que executam essa blockchain congelam. Rede morta.

A solução do Ethereum é direta, mas eficaz: gás. Cada computação custa gás. Você associa gás à sua transação. Quando o gás acaba, o código para. Não importa se a transação terminou. Não importa se estava no meio de uma transferência de dinheiro. O gás chega a zero, a execução termina. É por isso que as taxas de gás do ETH variam. Uma transferência simples: 21.000 de gás. Uma troca DeFi complexa: 200.000. Uma criação de NFT com arte on-chain: meio milhão. Você está pagando pela quantidade de computação que cada nó precisa realizar.

O Bitcoin analisou esse problema e disse "não". Não é possível escrever um loop, nem ficar preso em um. Todo script termina. Não há necessidade de mecanismo de gás. A linguagem é muito limitada para expressar "para sempre".

Junho de 2016: quando a teoria se tornou realidade, valendo 150 milhões de dólares.

Toda conversa sobre a completude de Turing em criptografia acaba chegando a este momento.

A DAO era um fundo de investimento de 150 milhões de dólares rodando na rede Ethereum. Contrato inteligente. Governança comunitária. O dinheiro entrava e os votos determinavam para onde ele ia. O código era complexo. Tinha loops, condicionais, chamadas entre contratos, estado que mudava durante a execução. Tudo o que a completude de Turing permite.

Alguém encontrou uma brecha. A função de saque enviava ETH primeiro e atualizava o saldo em seguida. O atacante chamava a função de saque, recebia o pagamento e, antes que o saldo fosse atualizado, a função chamava a si mesma novamente. E novamente. E novamente. Reentrância. Um loop que os desenvolvedores jamais previram, drenando dinheiro a cada ciclo.

Isso poderia acontecer no Bitcoin? Não. Um script do Bitcoin não pode chamar a si mesmo. Não pode chamar outros scripts. Não pode entrar em loop. O que torna o Bitcoin "sem graça" é o mesmo que torna esse ataque específico impossível.

A comunidade Ethereum votou por um hard fork na blockchain, revertendo o roubo. Essa divisão criou o Ethereum Classic. Os desenvolvedores aprenderam. As proteções contra reentrância tornaram-se padrão. O padrão "verificações-efeitos-interações" tornou-se dogma. Mas a verdade fundamental não mudou: código Turing-completo sempre pode conter bugs que seus criadores não previram. Isso não é uma falha do Ethereum. É uma consequência da matemática.

Turing completo

O Bitcoin está se tornando menos restritivo: Taproot e BitVM

A linha divisória entre Turing completo e Turing incompleto não é tão nítida quanto costumava ser para o Bitcoin.

O Taproot foi lançado em novembro de 2021 e expandiu as funcionalidades do Bitcoin Script. Oferece gastos condicionais mais complexos, maior privacidade por meio de assinaturas Schnorr e Árvores de Sintaxe Abstrata Merkelizadas que ocultam as condições de uma transação até que sejam executadas. Ainda não é Turing completo, mas é mais expressivo do que antes.

O BitVM, proposto em 2023, vai além. Ele descreve um sistema para realizar computação arbitrária fora da blockchain e, em seguida, verificar o resultado no Bitcoin. Imagine da seguinte forma: o processamento computacional ocorre em outro lugar, e o Bitcoin só intervém se alguém contestar o resultado. Em teoria, isso torna o Bitcoin praticamente Turing completo para casos de uso específicos, sem alterar a linguagem de programação em si.

Conversei com desenvolvedores do Bitcoin sobre o BitVM e a reação foi interessante. Eles estão entusiasmados com a capacidade, mas apavorados com o risco. Um deles me disse: "Não vamos apressar as coisas. As pessoas mantêm um trilhão de dólares nisso. Se estragarmos tudo tentando torná-lo mais sofisticado, ninguém nos perdoará." Essa cautela é frustrante para quem quer o DeFi do Bitcoin amanhã. É reconfortante para quem é a pessoa com um trilhão de dólares no sistema.

A tendência é para maior expressividade, independentemente de tudo. O Taproot já expandiu as possibilidades. O BitVM expandirá ainda mais. Mas não espere que o Bitcoin se torne o Ethereum. As culturas são muito diferentes para isso.

Por que será que todas as novas blockchains escolheram a completude de Turing, afinal?

Eis o que resolveu o debate na prática: ninguém mais constrói blockchains Turing incompletas. Solana, Cardano, Polkadot, Avalanche, BNB Chain. Todas Turing completas. Todas capazes de executar programas arbitrários. O mercado decidiu que a programabilidade vence, e a única questão agora é como tornar os sistemas Turing completos mais rápidos, mais baratos e mais seguros.

Cada blockchain fez escolhas diferentes. O Ethereum optou pela EVM e Solidity (maior ecossistema, taxas mais altas na camada 1). A Solana construiu o Sealevel para execução paralela usando Rust (rápido, mas mais difícil de desenvolver). A Cardano escolheu Haskell e verificação formal (matematicamente rigorosa, adoção mais lenta). Mas todas concordaram com a completude de Turing porque todas queriam executar contratos inteligentes, DeFi, NFTs, DAOs e tudo o mais que requer lógica personalizada.

Os problemas de segurança são reais. Explorações em DeFi custam bilhões todos os anos. O ataque à DAO foi apenas o começo. Mas o setor concluiu que os benefícios da programabilidade superam os riscos. Até mesmo o Bitcoin, a blockchain original intencionalmente limitada, está caminhando para uma maior expressividade com o Taproot e o BitVM.

Estou no mundo das criptomoedas há tempo suficiente para ter usado ambos os tipos de blockchain extensivamente. Já enviei transações em Bitcoin que foram confirmadas exatamente como esperado, todas as vezes. Também já implementei contratos inteligentes em Ethereum que fizeram coisas que eu não previ, porque o Solidity permite escrever códigos complexos o suficiente para surpreender a mim mesmo. Ambas as experiências moldaram minha visão.

O debate não gira tanto em torno de se a completude de Turing é boa ou ruim, mas sim sobre o que você precisa. Se você quer um sistema de pagamento digital que seja o mais seguro e previsível possível, o design do Bitcoin faz sentido. Se você quer construir aplicativos financeiros, jogos, sistemas de identidade ou qualquer coisa que precise de lógica personalizada, você precisa da completude de Turing. Grande parte do que torna as criptomoedas interessantes hoje em dia só foi possível porque um jovem de 19 anos decidiu que o risco valia a pena.

Penso nisso sempre que uso Uniswap, Aave ou qualquer protocolo DeFi. Cada troca que faço é um código sendo executado em uma máquina virtual Turing-completa. Cada transação carrega o risco teórico de que algum bug não previsto possa drenar todo o contrato. Mesmo assim, uso esses protocolos porque a utilidade compensa o risco para mim. Mas nunca me esqueço de que o risco existe. E nunca me esqueço de que o Bitcoin escolheu um caminho diferente, e esse caminho tem sua própria sabedoria. A máquina de venda automática nunca rouba seu dinheiro. O chef pode incendiar a cozinha.

Alguma pergunta?

Ethereum, Solana, Cardano, Polkadot, Avalanche, BNB Chain e praticamente todas as plataformas modernas de contratos inteligentes. Nenhuma nova blockchain está sendo construída sem a completude de Turing, porque o mercado exige programabilidade para DeFi, NFTs e aplicativos descentralizados.

Não exatamente, mas está ganhando capacidades. O Taproot (2021) adicionou mais lógica condicional. O BitVM (2023) propõe computação fora da cadeia com verificação na cadeia. Isso torna o Bitcoin mais programável sem torná-lo totalmente Turing completo. A comunidade Bitcoin prefere melhorias incrementais cuidadosas a mudanças radicais.

Um fundo de US$ 150 milhões em Ethereum foi drenado em 2016 devido a uma falha de reentrância. A função de saque enviava ETH antes de atualizar o saldo. O atacante chamava a função recursivamente, retirando mais ETH a cada vez antes que o contrato conseguisse processar a transação. Isso só foi possível porque a linguagem Ethereum suporta chamadas recursivas. Impossível no Bitcoin, pois o Bitcoin Script não suporta recursão.

Turing provou que nenhum algoritmo pode determinar se um programa arbitrário irá parar ou executar indefinidamente. Em uma blockchain, um loop infinito congelaria toda a rede. O Ethereum resolve isso com gás: cada computação custa gás e, quando o gás acaba, a execução para. O Bitcoin evita o problema completamente porque sua linguagem não consegue expressar loops infinitos.

Por design. Vitalik queria que o Ethereum fosse uma plataforma de computação de propósito geral. Satoshi queria que o Bitcoin fosse uma rede de pagamentos segura. Códigos mais simples são mais difíceis de explorar. O poder do Ethereum criou DeFi e NFTs. As limitações do Bitcoin impediram os tipos de bugs que levaram ao ataque de US$ 150 milhões à DAO. Ambas são escolhas válidas para propósitos diferentes.

Um sistema Turing-completo pode executar qualquer programa de computador, desde que haja tempo e memória suficientes. Ele pode realizar loops, tomar decisões e armazenar dados. Seu laptop é Turing-completo. Uma calculadora não é. No contexto de blockchain: o Ethereum é Turing-completo (executa qualquer contrato inteligente). O Bitcoin não é (processa apenas tipos específicos de transação). O conceito vem do artigo de Alan Turing de 1936.

Ready to Get Started?

Create an account and start accepting payments – no contracts or KYC required. Or, contact us to design a custom package for your business.

Make first step

Always know what you pay

Integrated per-transaction pricing with no hidden fees

Start your integration

Set up Plisio swiftly in just 10 minutes.