Completitud de Turing: qué significa, por qué Ethereum la necesitaba y por qué Bitcoin optó por evitarla.

Completitud de Turing: qué significa, por qué Ethereum la necesitaba y por qué Bitcoin optó por evitarla.

Un amigo que trabaja en finanzas tradicionales me preguntó una vez por qué Ethereum puede ejecutar aplicaciones financieras completas en su cadena de bloques, mientras que Bitcoin básicamente solo puede enviar dinero de una dirección a otra. "Ambas son cadenas de bloques", dijo. "¿Cuál es la diferencia real?"

Intenté explicarle la completitud de Turing y vi cómo se le nublaba la mirada. Así que lo intenté de nuevo con una analogía. Bitcoin es una máquina expendedora. Metes dinero, pulsas un botón y obtienes un artículo específico. Hace lo que se supone que debe hacer y nada más. Ethereum es una cocina con un chef. Dale al chef cualquier receta y suficientes ingredientes y puede preparar cualquier cosa. Bucles ("remover hasta que espese"), decisiones ("si está demasiado salado, añadir agua"), creatividad ("improvisar un postre con lo que queda"). El chef puede seguir cualquier instrucción. La máquina expendedora no.

Esa analogía no es perfecta. Un informático señalaría varias cosas que simplifiqué demasiado. Pero logró que mi amigo hiciera la pregunta correcta: "¿Por qué alguien querría ser una máquina expendedora?".

Esa pregunta resume todo el debate sobre la completitud de Turing en el mundo de las criptomonedas. Seguridad frente a flexibilidad. Previsibilidad frente a potencia. Bitcoin frente a Ethereum. Y la respuesta, para nuestra desgracia, es que ambas posturas son correctas.

De dónde proviene esta idea y por qué un artículo matemático de 1936 sigue siendo relevante.

Alan Turing publicó en 1936 un artículo titulado "Sobre los números computables". Tenía 23 años. En él, describía una máquina tan simple que parecía un juguete. Una tira de cinta dividida en celdas. Un cabezal que lee y escribe símbolos. Reglas que le indican al cabezal qué hacer según lo que lee. Cinta, cabezal, reglas. Esa es toda la máquina.

Esta es la parte que aún me pone la piel de gallina. Turing demostró que esta máquina increíblemente simple puede calcular cualquier cosa que cualquier computadora pueda calcular. No solo algunas cosas, sino cualquier cosa. Tu teléfono está realizando operaciones de lectura y escritura ahora mismo. También el servidor que ejecuta ChatGPT. Y el chip de tu coche. Demostró todo esto en 1936, antes de que existiera una sola computadora electrónica en la Tierra. El artículo tiene casi 90 años y todos los departamentos de informática del planeta aún lo enseñan en el primer semestre.

Cuando alguien dice que un sistema es "Turing completo", quiere decir que puede simular la máquina de cinta de Turing. Puede ejecutar bucles, tomar decisiones basadas en datos, almacenar información en memoria y ejecutar cualquier algoritmo. Tu portátil es Turing completo. Una calculadora de bolsillo no lo es. Y aquí va un dato curioso que me encanta compartir: los circuitos de Redstone de Minecraft son técnicamente Turing completos. Hay quienes han construido ordenadores funcionales dentro del juego. No ordenadores útiles, pero sí funcionales.

Turing completa

Cómo se manifiesta esto en Bitcoin: por qué Satoshi eligió la limitación.

Satoshi creó Bitcoin con un lenguaje de programación llamado Bitcoin Script, deliberadamente simple. A propósito. Verifica firmas, gestiona monederos multifirma, bloquea fondos con condiciones de tiempo, y eso es todo. Sin bucles. Sin ramificaciones complejas. Sin estado que se conserve entre transacciones.

La primera vez que comprendí la importancia de esto fue al leer sobre el hackeo de la DAO en Ethereum (ya hablaré de ello). Una llamada a una función recursiva provocó la pérdida de 150 millones de dólares de un contrato inteligente, ya que el código podía ejecutarse en un bucle infinito que los desarrolladores jamás previeron. En Bitcoin, ese hackeo es imposible. No improbable, sino imposible. Bitcoin Script no puede ejecutarse a sí mismo, no puede entrar en bucle ni usar recursión. El lenguaje es demasiado limitado para describir el tipo de error que le costó a Ethereum 150 millones de dólares.

Esa limitación es precisamente su característica principal. Cada script de Bitcoin finaliza de forma predecible. Puedes leerlo y saber exactamente qué hará. Sin sorpresas. Sin comportamientos inesperados. Cuando se trata de proteger una red valorada en más de un billón de dólares, ser "aburrido y predecible" no es una debilidad, sino una decisión de diseño.

Lo que Vitalik construyó y por qué lo cambió todo.

Vitalik Buterin tenía 19 años cuando publicó el documento técnico de Ethereum en 2013. Su pregunta era simple y radical: ¿qué pasaría si la propia cadena de bloques pudiera ejecutar cualquier programa? No solo "enviar monedas de A a B", sino cualquier cosa que una computadora pueda hacer.

Estaba en la universidad cuando se publicó el documento técnico de Ethereum. Lo leí en un PDF que alguien compartió en un foro de Bitcoin. La mitad de las respuestas decían que Vitalik era un genio. La otra mitad decía que estaba creando un sistema que sería hackeado de inmediato. Ambos tenían razón.

Ethereum se lanzó en 2015 con dos componentes que lo hicieron Turing completo. Solidity es el lenguaje de programación para escribir contratos inteligentes. Incluye bucles, condicionales, almacenamiento de estado y llamadas a funciones. Todo lo necesario. La Máquina Virtual de Ethereum ejecuta estos contratos en todos los nodos de la red simultáneamente. Juntos, permiten a los desarrolladores implementar cualquier código que puedan escribir.

Esa decisión es la razón de ser de DeFi. La razón de ser de los NFT. La razón de ser de las DAO. La razón de ser de miles de millones de dólares a través de programas que ninguna empresa controla. Todas las aplicaciones interesantes en el mundo de las criptomonedas, desde Uniswap hasta Aave y OpenSea, solo son posibles porque Ethereum puede ejecutar código arbitrario.

Pero Vitalik hizo una apuesta. Apostó a que el poder de la flexibilidad superaría el riesgo de la complejidad. El hackeo de DAO en 2016 puso a prueba esa apuesta. Las vulnerabilidades de DeFi, que cuestan miles de millones cada año, siguen poniéndola a prueba. Y la comunidad de Bitcoin sigue señalando esas pérdidas y diciendo: "Por eso nos mantuvimos simples". Ambas partes tienen razón.

El problema de las paradas y por qué existen las tarifas de gasolina.

Esta es la parte que me quitó el sueño cuando la comprendí por primera vez.

En ese mismo artículo de 1936, Turing demostró algo incómodo: ningún algoritmo puede analizar un programa arbitrario y determinar con fiabilidad si terminará de ejecutarse o entrará en un bucle infinito. No se trata de un problema tecnológico sin resolver, sino de una imposibilidad matemática. Demostrado. Hecho. Ningún ordenador, por muy avanzado que sea, puede resolver el problema de la parada para todos los programas.

En mi portátil, un bucle infinito es molesto. Pulso Ctrl+C y sigo adelante. En una cadena de bloques, un bucle infinito es catastrófico. Cada nodo ejecuta todos los contratos inteligentes. Si un contrato nunca se detiene, todos los nodos del planeta que ejecutan esa cadena de bloques se bloquean. La red se cae.

La solución de Ethereum es directa pero efectiva: gas. Cada cálculo cuesta gas. Se adjunta gas a la transacción. Cuando se agota el gas, el código se detiene. No importa si finalizó o si estaba en medio de la transferencia de dinero. Cuando el gas llega a cero, la ejecución termina. Por eso, las tarifas de gas de ETH varían. Una transferencia simple: 21 000 de gas. Un intercambio DeFi complejo: 200 000. La creación de un NFT con arte en la cadena: medio millón. Se paga por la cantidad de cálculos que cada nodo tiene que realizar.

Bitcoin analizó este problema y dijo "no". No se puede escribir un bucle, ni quedarse atascado en uno. Todos los scripts terminan. No se necesita ningún mecanismo de gas. El lenguaje es demasiado limitado para expresar "para siempre".

Junio de 2016: cuando la teoría se convirtió en realidad en 150 millones de dólares.

Toda conversación sobre la completitud de Turing en criptografía llega tarde o temprano a este momento.

La DAO era un fondo de inversión de 150 millones de dólares que funcionaba en Ethereum. Contrato inteligente. Gobernanza comunitaria. El dinero entraba y los votos decidían a dónde iba. El código era complejo. Tenía bucles, condicionales, llamadas entre contratos y un estado que cambiaba durante la ejecución. Todo lo que permite la completitud de Turing.

Alguien encontró una vulnerabilidad. La función de retiro envió primero el ETH y luego actualizó el saldo. El atacante llamó a la función de retiro, recibió el pago y, antes de que se actualizara el saldo, la función se volvió a llamar a sí misma. Y otra vez. Y otra vez. Un bucle infinito. Un despilfarro de dinero en cada ciclo, algo que los desarrolladores jamás pretendieron.

¿Podría ocurrir esto en Bitcoin? No. Un script de Bitcoin no puede llamarse a sí mismo. No puede llamar a otros scripts. No puede entrar en bucles. Lo que hace que Bitcoin sea aburrido es lo mismo que hace imposible este ataque en concreto.

La comunidad de Ethereum votó a favor de bifurcar la cadena y revertir el robo. Esa bifurcación dio origen a Ethereum Classic. Los desarrolladores aprendieron. Los mecanismos de protección contra la reentrada se convirtieron en estándar. El patrón de "verificaciones, efectos e interacciones" se convirtió en un principio fundamental. Pero la verdad esencial no cambió: el código Turing-completo siempre puede contener errores que sus creadores no previeron. Esto no es un fallo de Ethereum, sino una consecuencia de las matemáticas.

Turing completa

Bitcoin se está volviendo menos limitado: Taproot y BitVM

La línea que separa a las máquinas Turing completas de las Turing incompletas ya no es tan nítida como solía serlo para Bitcoin.

Taproot se lanzó en noviembre de 2021 y amplió las capacidades de Bitcoin Script. Ofrece gastos condicionales más complejos, mayor privacidad mediante firmas Schnorr y árboles de sintaxis abstracta Merkelizados que ocultan las condiciones de una transacción hasta su ejecución. Aún no es Turing completo, pero es más expresivo que antes.

BitVM, propuesto en 2023, va más allá. Describe un sistema para realizar cálculos arbitrarios fuera de la cadena de bloques y luego verificar el resultado en Bitcoin. Imagínelo así: el cálculo real se realiza en otro lugar, y Bitcoin solo interviene si alguien disputa el resultado. En teoría, esto hace que Bitcoin sea prácticamente Turing completo para casos de uso específicos sin cambiar el lenguaje de programación.

He hablado con desarrolladores de Bitcoin sobre BitVM y su reacción es interesante. Les entusiasma su potencial, pero les aterra el riesgo. Uno de ellos me dijo: "No vamos a precipitarnos. Hay gente que guarda un billón de dólares aquí. Si lo estropeamos intentando hacerlo más sofisticado, nadie nos lo perdonará". Esta cautela resulta frustrante si uno quiere que Bitcoin DeFi esté disponible de inmediato. Sin embargo, es tranquilizadora si uno es quien gestiona un billón de dólares en el sistema.

La tendencia apunta hacia una mayor expresividad, sin importar las circunstancias. Taproot ya amplió las posibilidades. BitVM las ampliará aún más. Pero no esperen que Bitcoin se convierta en Ethereum. Sus culturas son demasiado diferentes para eso.

¿Por qué todas las nuevas cadenas de bloques optaron por la completitud de Turing?

En la práctica, esto zanjó el debate: ya nadie construye cadenas de bloques Turing-incompletas. Solana, Cardano, Polkadot, Avalanche, BNB Chain. Todas Turing-completas. Todas capaces de ejecutar programas arbitrarios. El mercado decidió que la programabilidad es clave, y ahora la única incógnita es cómo lograr que los sistemas Turing-completos sean más rápidos, económicos y seguros.

Cada cadena hizo concesiones diferentes. Ethereum optó por la EVM y Solidity (el ecosistema más grande, pero con las comisiones más altas en L1). Solana desarrolló Sealevel para la ejecución paralela usando Rust (rápido, pero más difícil de desarrollar). Cardano eligió Haskell y la verificación formal (riguroso matemáticamente, pero con una adopción más lenta). Pero todas dieron el visto bueno a la completitud de Turing porque todas querían ejecutar contratos inteligentes, DeFi, NFT, DAO y todo lo demás que requiere lógica personalizada.

Los problemas de seguridad son reales. Las vulnerabilidades en DeFi cuestan miles de millones cada año. El hackeo de DAO fue solo el comienzo. Pero la industria concluyó que los beneficios de la programabilidad superan los riesgos. Incluso Bitcoin, la cadena original con limitaciones intencionadas, está avanzando hacia una mayor expresividad con Taproot y BitVM.

Llevo el tiempo suficiente en el mundo de las criptomonedas como para haber utilizado ambos tipos de cadenas de bloques extensamente. He enviado transacciones de Bitcoin que se confirmaron exactamente como esperaba en cada ocasión. También he implementado contratos inteligentes de Ethereum que hicieron cosas que no preví, porque Solidity permite escribir código lo suficientemente complejo como para sorprenderte. Ambas experiencias moldearon mi perspectiva.

El debate no se centra tanto en si la completitud de Turing es buena o mala, sino más bien en lo que se necesita. Si se busca un sistema de pago digital lo más seguro y predecible posible, el diseño de Bitcoin tiene sentido. Si se quieren crear aplicaciones financieras, juegos, sistemas de identidad o cualquier cosa que requiera lógica personalizada, se necesita la completitud de Turing. Gran parte de lo que hace que las criptomonedas sean interesantes hoy en día solo fue posible porque un joven de 19 años decidió que valía la pena correr el riesgo.

Pienso en esto cada vez que uso Uniswap, Aave o cualquier protocolo DeFi. Cada intercambio que realizo es código que se ejecuta en una máquina virtual Turing-completa. Cada transacción conlleva el riesgo teórico de que algún error inesperado pueda agotar todo el contrato. Aun así, uso estos protocolos porque la utilidad justifica el riesgo. Pero nunca olvido que el riesgo existe. Y nunca olvido que Bitcoin eligió un camino diferente, y ese camino tiene su propia sabiduría. La máquina expendedora nunca te roba el dinero. El chef puede quemar la cocina.

¿Alguna pregunta?

Ethereum, Solana, Cardano, Polkadot, Avalanche, BNB Chain y prácticamente todas las plataformas modernas de contratos inteligentes. No se está creando ninguna nueva blockchain sin la completitud de Turing, ya que el mercado exige programabilidad para DeFi, NFT y aplicaciones descentralizadas.

No exactamente, pero está adquiriendo capacidades. Taproot (2021) añadió lógica condicional. BitVM (2023) propone computación fuera de la cadena con verificación en la cadena. Esto hace que Bitcoin sea más programable sin que sea completamente Turing completo. La comunidad de Bitcoin prefiere mejoras incrementales cuidadosas a cambios radicales.

En 2016, un fondo de Ethereum de 150 millones de dólares fue vaciado debido a una vulnerabilidad de reentrada. La función de retiro enviaba ETH antes de actualizar el saldo. El atacante llamaba a la función de forma recursiva, extrayendo más ETH cada vez antes de que el contrato se pusiera al día. Esto solo fue posible porque el lenguaje de Ethereum admite llamadas recursivas. Es imposible en Bitcoin porque Bitcoin Script no admite recursión.

Turing demostró que ningún algoritmo puede determinar si un programa arbitrario se detendrá o se ejecutará indefinidamente. En una cadena de bloques, un bucle infinito paralizaría toda la red. Ethereum resuelve esto con gas: cada cálculo cuesta gas, y cuando se agota, la ejecución se detiene. Bitcoin evita el problema por completo porque su lenguaje no puede expresar bucles infinitos.

Por diseño. Vitalik quería que Ethereum fuera una plataforma informática de propósito general. Satoshi quería que Bitcoin fuera una red de pagos segura. Un código más simple es más difícil de explotar. El poder de Ethereum dio origen a las finanzas descentralizadas (DeFi) y los NFT. Las limitaciones de Bitcoin evitaron el tipo de errores que llevaron al hackeo de DAO, que costó 150 millones de dólares. Ambas son opciones válidas para diferentes propósitos.

Un sistema Turing-completo puede ejecutar cualquier programa informático con suficiente tiempo y memoria. Puede realizar bucles, tomar decisiones y almacenar datos. Tu portátil es Turing-completo. Una calculadora no lo es. En blockchain: Ethereum es Turing-completo (ejecuta cualquier contrato inteligente). Bitcoin no lo es (solo procesa tipos de transacciones específicos). El concepto proviene del artículo 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.