Turing completo: cosa significa, perché Ethereum ne aveva bisogno e perché Bitcoin ha scelto di evitarlo

Turing completo: cosa significa, perché Ethereum ne aveva bisogno e perché Bitcoin ha scelto di evitarlo

Un amico che lavora nella finanza tradizionale una volta mi ha chiesto perché Ethereum possa far funzionare intere applicazioni finanziarie sulla sua blockchain, mentre Bitcoin può sostanzialmente solo trasferire denaro da un indirizzo a un altro. "Sono entrambe blockchain", ha detto. "Qual è la differenza reale?"

Ho provato a spiegargli la completezza di Turing e ho visto i suoi occhi velarsi di noia. Così ci ho riprovato con un'analogia. Bitcoin è un distributore automatico. Ci metti dentro i soldi, premi un pulsante e ti danno un oggetto specifico. Fa quello per cui è stato costruito e nient'altro. Ethereum è una cucina con uno chef. Dai allo chef una qualsiasi ricetta e ingredienti a sufficienza e lui può preparare qualsiasi cosa. Cicli ("mescolare fino a quando non si addensa"), decisioni ("se troppo salato, aggiungere acqua"), creatività ("improvvisare un dessert con quello che resta"). Lo chef può seguire qualsiasi istruzione. Il distributore automatico no.

Quest'analogia non è perfetta. Un informatico farebbe notare diverse semplificazioni eccessive. Ma ha spinto il mio amico a porsi la domanda giusta: "Perché mai qualcuno dovrebbe scegliere di essere un distributore automatico?"

Questa domanda racchiude l'intero dibattito sulla completezza di Turing nel mondo delle criptovalute. Sicurezza contro flessibilità. Prevedibilità contro potenza. Bitcoin contro Ethereum. E la risposta, purtroppo, è che entrambe le parti hanno ragione.

Da dove nasce quest'idea e perché un articolo di matematica del 1936 è ancora rilevante.

Nel 1936, a soli 23 anni, Alan Turing pubblicò un articolo intitolato "Sui numeri calcolabili". In esso, descriveva una macchina talmente semplice da sembrare un giocattolo: un nastro divisa in celle, una testina che legge e scrive simboli e delle regole che indicano alla testina cosa fare in base a ciò che legge. Nastro, testina, regole: ecco cos'è la macchina.

Ecco la parte che ancora mi fa venire i brividi. Turing dimostrò che questa macchina incredibilmente semplice può calcolare qualsiasi cosa un computer possa mai calcolare. Non solo alcune cose. Qualsiasi cosa. Il tuo telefono sta eseguendo operazioni di lettura/scrittura su nastro proprio ora. Così come il server che esegue ChatGPT. E anche il chip nella tua auto. Dimostrò tutto questo nel 1936, prima che esistesse un singolo computer elettronico sulla Terra. L'articolo ha quasi 90 anni e ogni dipartimento di informatica del pianeta lo insegna ancora al primo semestre.

Quando si dice che un sistema è "Turing completo", si intende che può simulare la macchina a nastro di Turing. Può eseguire cicli, prendere decisioni basate sui dati, memorizzare informazioni ed eseguire qualsiasi algoritmo. Il tuo portatile è Turing completo. Una calcolatrice tascabile no. E ecco una curiosità che mi piace raccontare: i circuiti di redstone di Minecraft sono tecnicamente Turing completi. Alcune persone hanno costruito computer funzionanti all'interno del gioco. Non computer utili, ma funzionanti.

lavoro completato

Come questo si riflette su Bitcoin: perché Satoshi ha scelto la limitazione

Satoshi ha creato Bitcoin con un linguaggio di programmazione chiamato Bitcoin Script, volutamente semplice. Di proposito. Verifica le firme, gestisce i portafogli multi-firma, blocca i fondi con vincoli temporali e questo è tutto. Nessun ciclo. Nessuna ramificazione complessa. Nessuno stato che si trasferisce tra le transazioni.

La prima volta che ho capito perché questo sia importante, stavo leggendo dell'attacco hacker alla DAO su Ethereum (ci arriverò). Una chiamata di funzione ricorsiva ha prosciugato 150 milioni di dollari da uno smart contract perché il codice poteva richiamare se stesso in un ciclo infinito che gli sviluppatori non avevano previsto. Su Bitcoin, un attacco del genere è impossibile. Non improbabile. Impossibile. Bitcoin Script non può richiamare se stesso. Non può entrare in un ciclo. Non può essere ricorsivo. Il linguaggio è troppo limitato per esprimere il tipo di bug che è costato a Ethereum 150 milioni di dollari.

Questa limitazione è la caratteristica. Ogni script Bitcoin termina in modo prevedibile. Puoi leggerlo e sapere esattamente cosa farà. Nessuna sorpresa. Nessun comportamento inaspettato. Quando si tratta di proteggere una rete che vale oltre un trilione di dollari, "noioso e prevedibile" non è una debolezza. È una scelta di progettazione.

Cosa ha costruito Vitalik e perché ha cambiato tutto

Vitalik Buterin aveva 19 anni quando pubblicò il white paper di Ethereum nel 2013. La sua domanda era semplice e rivoluzionaria: e se la blockchain stessa potesse eseguire qualsiasi programma? Non solo "inviare monete da A a B", ma qualsiasi cosa un computer possa fare?

Ero al college quando uscì il white paper di Ethereum. Lo lessi su un PDF che qualcuno aveva condiviso in un forum di Bitcoin. Metà dei commenti diceva che Vitalik era un genio. L'altra metà diceva che stava costruendo un sistema che sarebbe stato hackerato immediatamente. Entrambi avevano ragione.

Ethereum è stato lanciato nel 2015 con due componenti che lo hanno reso Turing-completo. Solidity è il linguaggio di programmazione per la scrittura di smart contract. Include cicli, istruzioni condizionali, gestione dello stato e chiamate di funzione: tutto il necessario. La Ethereum Virtual Machine esegue questi contratti simultaneamente su ogni nodo della rete. Insieme, consentono agli sviluppatori di implementare qualsiasi codice possano scrivere.

Quella singola decisione è il motivo per cui esiste la DeFi. Perché esistono gli NFT. Perché esistono le DAO. Perché miliardi di dollari transitano attraverso programmi che nessuna singola azienda controlla. Ogni applicazione interessante nel mondo delle criptovalute, da Uniswap ad Aave a OpenSea, è possibile solo perché Ethereum può eseguire codice arbitrario.

Ma Vitalik ha fatto una scommessa. Ha scommesso che il vantaggio della flessibilità avrebbe superato il rischio della complessità. L'attacco hacker alla DAO nel 2016 ha messo a dura prova questa scommessa. Gli attacchi alla DeFi, che costano miliardi ogni anno, continuano a metterla alla prova. E la comunità Bitcoin continua a indicare quelle perdite e a dire "ecco perché siamo rimasti fedeli alla semplicità". Entrambe le parti hanno ragione.

Il problema dell'arresto e il perché esistono le tariffe del carburante

Ecco la parte che mi ha tenuto sveglio la notte quando l'ho capita per la prima volta.

Nello stesso articolo del 1936, Turing dimostrò qualcosa di scomodo: nessun algoritmo può esaminare un programma arbitrario e determinare in modo affidabile se terminerà l'esecuzione o se entrerà in un ciclo infinito. Non si tratta di un problema tecnologico che non abbiamo ancora risolto. È un'impossibilità matematica. Dimostrato. Fatto. Nessun computer, per quanto avanzato, può risolvere il problema dell'arresto per tutti i programmi.

Sul mio portatile, un ciclo infinito è fastidioso. Premo Ctrl-C. La vita continua. Su una blockchain, un ciclo infinito è catastrofico. Ogni nodo esegue ogni smart contract. Se un contratto non si ferma mai, ogni nodo del pianeta che esegue quella blockchain si blocca. Rete morta.

La soluzione di Ethereum è semplice ma efficace: il gas. Ogni calcolo ha un costo in gas. Il gas viene associato alla transazione. Quando il gas si esaurisce, il codice si ferma. Non importa se l'operazione è terminata o se il trasferimento di denaro è in corso. Se il gas arriva a zero, l'esecuzione si interrompe. Ecco perché le commissioni del gas di ETH variano. Un semplice trasferimento: 21.000 gas. Uno scambio DeFi complesso: 200.000. La creazione di un NFT con grafica on-chain: mezzo milione. Si paga in base alla quantità di calcolo che ogni nodo deve eseguire.

Bitcoin ha esaminato questo problema e ha detto "no". Non è possibile scrivere un ciclo, né rimanervi bloccati. Ogni script termina. Non è necessario alcun meccanismo di gas. Il linguaggio è troppo limitato per esprimere "per sempre".

Giugno 2016: quando la teoria si è trasformata in realtà da 150 milioni di dollari.

Ogni discussione sulla completezza di Turing in ambito crittografico giunge inevitabilmente a questo punto.

La DAO era un fondo di investimento da 150 milioni di dollari basato su Ethereum. Smart contract. Governance comunitaria. Il denaro entrava, i voti determinavano dove usciva. Il codice era complesso. Conteneva cicli, istruzioni condizionali, chiamate tra contratti, uno stato che cambiava durante l'esecuzione. Tutto ciò che la completezza di Turing permette.

Qualcuno ha trovato una falla. La funzione di prelievo inviava prima ETH e poi aggiornava il saldo. L'attaccante richiamava la funzione di prelievo, veniva pagato e, prima che il saldo venisse aggiornato, la funzione richiamava se stessa. E ancora. E ancora. Un ciclo di reentrancy. Un loop che gli sviluppatori non avevano previsto, che prosciugava il denaro a ogni ciclo.

Potrebbe accadere una cosa del genere su Bitcoin? No. Bitcoin Script non può richiamare se stesso. Non può richiamare altri script. Non può creare cicli. La stessa cosa che rende Bitcoin noioso è ciò che rende impossibile questo specifico attacco.

La comunità di Ethereum ha votato per un hard fork della blockchain e per annullare il furto. Questa divisione ha dato origine a Ethereum Classic. Gli sviluppatori hanno imparato la lezione. Le protezioni di rientranza sono diventate standard. Il modello "controlli-effetti-interazioni" è diventato un dogma. Ma la verità fondamentale non è cambiata: il codice Turing-completo può sempre contenere bug che i suoi creatori non avevano previsto. Questo non è un difetto di Ethereum. È una conseguenza della matematica.

lavoro completato

Bitcoin sta diventando meno limitato: Taproot e BitVM

Il confine tra Turing completo e Turing incompleto non è più così netto come lo era un tempo per Bitcoin.

Taproot è stato rilasciato nel novembre 2021 e ha ampliato le capacità di Bitcoin Script. Include funzionalità più complesse per la spesa condizionale, una maggiore privacy grazie alle firme Schnorr e alberi di sintassi astratta Merkelizzati che nascondono le condizioni di una transazione fino alla sua esecuzione. Non è ancora Turing completo, ma è più espressivo di prima.

BitVM, proposto nel 2023, va oltre. Descrive un sistema per eseguire calcoli arbitrari off-chain e poi verificarne il risultato su Bitcoin. In pratica, il calcolo vero e proprio avviene altrove e Bitcoin interviene solo se qualcuno contesta il risultato. In teoria, questo rende Bitcoin praticamente Turing-completo per casi d'uso specifici, senza dover modificare il linguaggio di scripting stesso.

Ho parlato con alcuni sviluppatori di Bitcoin riguardo a BitVM e le loro reazioni sono interessanti. Sono entusiasti delle sue potenzialità, ma terrorizzati dai rischi. Uno di loro mi ha detto: "Non abbiamo intenzione di affrettare i tempi. Ci sono persone che investono trilioni di dollari in questo sistema. Se lo roviniamo cercando di renderlo più sofisticato, nessuno ce lo perdonerà". Questa cautela è frustrante se si desidera Bitcoin DeFi già domani. È rassicurante, invece, se si è tra coloro che hanno investito trilioni di dollari nel sistema.

La direzione è comunque verso una maggiore espressività. Taproot ha già ampliato i limiti del possibile. BitVM li amplierà ulteriormente. Ma non aspettatevi che Bitcoin diventi Ethereum. Le culture sono troppo diverse perché ciò accada.

Perché ogni nuova blockchain ha comunque scelto la completezza di Turing

Ecco cosa ha risolto la questione nella pratica: nessuno costruisce più blockchain Turing-incomplete. Solana, Cardano, Polkadot, Avalanche, BNB Chain. Tutte Turing-complete. Tutte in grado di eseguire programmi arbitrari. Il mercato ha deciso che la programmabilità vince, e l'unica domanda ora è come rendere i sistemi Turing-completi più veloci, economici e sicuri.

Ogni blockchain ha fatto scelte diverse. Ethereum ha optato per l'EVM e Solidity (ecosistema più ampio, commissioni più elevate su L1). Solana ha creato Sealevel per l'esecuzione parallela utilizzando Rust (veloce ma più difficile da sviluppare). Cardano ha scelto Haskell e la verifica formale (matematicamente rigoroso, adozione più lenta). Ma tutte hanno scelto la completezza di Turing perché volevano tutte eseguire smart contract, DeFi, NFT, DAO e tutto ciò che richiede una logica personalizzata.

I problemi di sicurezza sono reali. Gli attacchi informatici al settore DeFi costano miliardi ogni anno. L'attacco alla DAO è stato solo l'inizio. Ma il settore ha concluso che i vantaggi della programmabilità superano i rischi. Persino Bitcoin, la blockchain originariamente volutamente limitata, si sta muovendo verso una maggiore espressività con Taproot e BitVM.

Sono nel mondo delle criptovalute da abbastanza tempo da aver utilizzato ampiamente entrambi i tipi di blockchain. Ho inviato transazioni Bitcoin che sono state confermate esattamente come previsto ogni singola volta. Ho anche implementato smart contract su Ethereum che hanno fatto cose che non avevo previsto, perché Solidity permette di scrivere codice talmente complesso da sorprendere persino se stessi. Entrambe le esperienze hanno plasmato la mia visione.

Il dibattito non verte tanto sul fatto che la completezza di Turing sia un bene o un male, quanto piuttosto su ciò di cui si ha effettivamente bisogno. Se si desidera un sistema di pagamento digitale che sia il più sicuro e prevedibile possibile, il design di Bitcoin ha senso. Se invece si vogliono sviluppare applicazioni finanziarie, giochi, sistemi di identità o qualsiasi altra cosa che richieda una logica personalizzata, è necessaria la completezza di Turing. Gran parte di ciò che rende le criptovalute interessanti oggi è stato possibile solo perché un diciannovenne ha deciso che valeva la pena correre il rischio.

Penso a questo ogni volta che uso Uniswap, Aave o qualsiasi altro protocollo DeFi. Ogni scambio che effettuo è codice in esecuzione su una macchina virtuale Turing-completa. Ogni transazione comporta il rischio teorico che un bug imprevisto possa svuotare l'intero contratto. Utilizzo comunque questi protocolli perché per me l'utilità che offrono giustifica il rischio. Ma non dimentico mai che il rischio esiste. E non dimentico mai che Bitcoin ha scelto una strada diversa, e quella strada ha una sua saggezza. Il distributore automatico non ti ruba mai i soldi. Lo chef può anche dare fuoco alla cucina.

Qualsiasi domanda?

Ethereum, Solana, Cardano, Polkadot, Avalanche, BNB Chain e praticamente ogni moderna piattaforma per smart contract. Nessuna nuova blockchain viene creata senza la completezza di Turing perché il mercato richiede programmabilità per DeFi, NFT e applicazioni decentralizzate.

Non esattamente, ma sta acquisendo nuove capacità. Taproot (2021) ha aggiunto ulteriore logica condizionale. BitVM (2023) propone il calcolo off-chain con verifica on-chain. Questi miglioramenti rendono Bitcoin più programmabile senza renderlo completamente Turing-completo. La comunità Bitcoin predilige miglioramenti incrementali e ponderati rispetto a cambiamenti radicali.

Nel 2016, un fondo Ethereum da 150 milioni di dollari è stato svuotato a causa di un bug di reentrancy. La funzione di prelievo inviava ETH prima di aggiornare il saldo. L`attaccante ha richiamato la funzione in modo ricorsivo, prelevando ogni volta più ETH prima che il contratto si aggiornasse. Ciò è stato possibile solo perché il linguaggio di Ethereum supporta le chiamate ricorsive. Impossibile su Bitcoin perché Bitcoin Script non supporta la ricorsione.

Turing dimostrò che nessun algoritmo può determinare se un programma arbitrario si fermerà o continuerà a funzionare all`infinito. Su una blockchain, un ciclo infinito bloccherebbe l`intera rete. Ethereum risolve questo problema con il gas: ogni calcolo ha un costo in gas e, quando il gas si esaurisce, l`esecuzione si interrompe. Bitcoin evita completamente il problema perché il suo linguaggio non può esprimere cicli infiniti.

Per scelta progettuale. Vitalik voleva che Ethereum fosse una piattaforma di calcolo generica. Satoshi voleva che Bitcoin fosse una rete di pagamento sicura. Un codice più semplice è più difficile da sfruttare. La potenza di Ethereum ha dato vita alla DeFi e agli NFT. I limiti di Bitcoin hanno impedito il tipo di bug che hanno portato all`attacco hacker da 150 milioni di dollari alla DAO. Entrambe sono scelte valide per scopi diversi.

Un sistema Turing-completo può eseguire qualsiasi programma per computer, a patto di avere tempo e memoria sufficienti. Può eseguire cicli, prendere decisioni e memorizzare dati. Il tuo laptop è Turing-completo. Una calcolatrice no. Nel contesto della blockchain: Ethereum è Turing-completo (esegue qualsiasi smart contract). Bitcoin non lo è (elabora solo specifici tipi di transazione). Il concetto deriva dall`articolo di Alan Turing del 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.