Turing Complete

Turing Complete

The concept of Turing Completeness is often discussed in software engineering, perhaps more frequently than one might expect. There seems to be some confusion regarding what exactly Turing Completeness entails, particularly in the context of software engineering.

Turing Completeness is a characteristic attributed to a computational system, signifying that it possesses the same computational power as a Turing machine. But what does this really mean? Let's delve deeper into this concept.

A system that is Turing Complete is one that, given sufficient time and memory, along with necessary instructions, has the capability to solve any computational problem, regardless of its complexity. This term is commonly applied to modern programming languages, as most of them – including C++, Python, JavaScript, and others – are Turing Complete. This means that these languages can theoretically execute any algorithm, provided they are given the necessary resources and instructions.

blog top

What is Turing completeness?

Turing Completeness is a fundamental concept in the realm of computing, initially defined by Alan Turing. It describes the capability of some computing machines to perform any task that any computer can execute. This principle is central to software and application development, allowing code to be written without pre-verification of its functionality. It means that a programmer can write a program without worrying about its limitations in execution.

The term originates from the Turing machine, a theoretical model created by English mathematician and cryptographer Alan Turing. Although it is not a physical device, the Turing machine is a vital mathematical concept. It can theoretically solve any problem that is computable, provided it has enough time and memory. If a system can simulate the functions of a Turing machine, it is deemed Turing complete.

Most modern programming languages like Solidity, Python, C++, and Java are Turing complete, meaning they can simulate the operations of a Turing machine. This contrasts with Turing incomplete systems, like simple calculators, which are limited to specific tasks.

The concept of Turing completeness has significant implications in blockchain technology. For example, Ethereum's Turing completeness, enabled by its Solidity programming language and Ethereum Virtual Machine (EVM), allows developers to write and execute complex, multifaceted programs. This is in stark contrast to Bitcoin, whose Script programming language is intentionally Turing incomplete, restricting it to simpler, specific operations.

In essence, Turing completeness defines the extent of a system's computational capabilities. The more computational tasks a system can execute, the more Turing complete it is. This distinction is crucial in understanding the range and complexity of tasks executable in different blockchain platforms.

What Does Turing Complete Mean in Blockchain?

Typically, the following characteristics define Turing completeness:

  1. Logical Loops: This entails the system's ability to execute a function or a series of instructions repeatedly.
  2. Input/Output Operations: The capability of the system to read and write data, meaning it can process input and generate output based on this data.
  3. Computation Power: The system must be able to compute any solvable problem that a Turing machine can address.
  4. Conditional Branching: The system's actions can vary depending on the data values it processes.

In the context of blockchains, those that satisfy these criteria are considered Turing complete. This implies that the programming languages used for developing smart contracts on these blockchains can address any computational challenge. Take Ethereum as an example: it employs Solidity for its native coding and smart contracts. This capability is crucial for the blockchain to understand and implement the terms of smart contracts, even those that may arise in the future. Essentially, Ethereum's Turing completeness enables it to execute almost any task, given the correct instructions and sufficient resources like time and computational power.

In contrast, Bitcoin's scripting language, known as Script, does not meet the criteria for Turing completeness. Script was deliberately designed to manage basic functions like transferring values and executing simple smart contracts. It avoids Turing completeness to prevent loops from overburdening the network's nodes and to safeguard the network’s integrity. Turing completeness in Bitcoin could introduce additional security risks by allowing the execution of arbitrary code, potentially exposing the network to new types of attacks.

Ethereum – the first Turing complete blockchain

Ethereum emerged as the pioneering blockchain platform to introduce Turing completeness, revolutionizing the realm of smart contracts and decentralized applications (dApps). This breakthrough was achieved through two key components:

  • Smart Contracts in Solidity: Ethereum’s smart contracts are crafted using Solidity, a versatile, Turing complete programming language tailored specifically for Ethereum’s ecosystem.
  • The Ethereum Virtual Machine (EVM): This computational engine executes smart contracts, functioning as a Turing complete entity.

The EVM's robust design allows it to handle any smart contract configuration, even those with purposes not yet envisioned. This launch of Ethereum as the inaugural Turing complete blockchain represented a pivotal advancement, broadening blockchain technology's scope beyond predetermined applications to an array of limitless possibilities.

Despite its theoretical Turing completeness, Ethereum encounters practical limitations in real-world applications. The blockchain's operational mechanics dictate that every transaction incurs a 'gas' fee. Consequently, should a smart contract enter an infinite loop – a scenario possible in Turing machines – it would eventually deplete its gas supply.

This constraint on Ethereum's Turing completeness is intentional. Allowing numerous smart contracts to operate in infinite loops would be impractical for a public blockchain network with limited processing resources. To address this, Ethereum enforces a gas limit for each transaction, capping the maximum computational power available. Transactions failing to conclude within this limit are automatically terminated.

It’s noteworthy, however, that the majority of Ethereum’s smart contracts rarely exploit recursive loops or other complex features associated with Turing completeness. While this capability underlines Ethereum's theoretical power and versatility, in practice, simpler and more efficient contract structures are preferred for most applications, balancing the need for sophisticated functionality with the realities of blockchain resource management.

Limitations of Turing Completeness in Blockchain Applications

The boundless programmability of Turing complete systems is their greatest asset, yet it simultaneously presents a notable vulnerability, especially in public blockchains where the code is openly accessible. This openness can expose the code to various disruptions, like bugs in smart contracts, or exploitation for unintended purposes, disrupting the protocol's intended operations. The capability to program any computation creates an extensive range of potential outcomes, many of which may be unforeseeable.

In centralized systems, unexpected issues can be swiftly addressed by the owning company through immediate patches. Contrastingly, in blockchain-based systems, unforeseen manipulations can cause substantial disturbances. For instance, if an individual exploits a loophole for an unexpected outcome, it can lead to significant issues. Blockchain's decentralized nature further complicates this, as any software updates require community consensus, often prolonging the process.

A prominent example illustrating this challenge is The DAO incident on the Ethereum blockchain in 2016. This decentralized VC fund-like smart contract faced an event often mislabeled as a hack. A user exploited a vulnerability in the smart contract's code, conducting what is now known as a reentrancy attack, siphoning over $150 million from the fund. This led to a contentious decision to revert the Ethereum blockchain, causing the Ethereum Classic fork.

However, it's important to note that this event wasn't a traditional hack but rather an exploitation of a then-unknown code vulnerability. The attacker used an untrusted contract in a reentrancy attack to withdraw funds.

Post-DAO, developers have refined programming practices to address such vulnerabilities. Nonetheless, the nature of Turing complete systems, where new code is constantly being developed, means new vulnerabilities may still emerge. This highlights the need for ongoing vigilance and adaptive security measures in blockchain technology to ensure robustness against such exploits.

banner 3

Please note that Plisio also offers you:

Create Crypto Invoices in 2 Clicks and Accept Crypto Donations

12 integrations

6 libraries for the most popular programming languages

19 cryptocurrencies and 12 blockchains

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.