Nick Szabo first described smart contracts in the 1990s. Back then, he defined a smart contract as a tool that formalizes and secures computer networks by combining protocols with user interfaces.
Szabo discussed the potential use of smart contracts in various fields that involve contractual agreements - such as credit systems, payment processing, and content rights management.
Blockchain smart contracts allow for the creation of trustless protocols. This means that two parties can make commitments via blockchain, without having to know or trust each other. They can be sure that if the conditions aren't fulfilled, the contract won't be executed. Other than that, the use of smart contracts can remove the need for intermediaries, reducing operational costs significantly.
This article will focus on the smart contracts that run on the Ethereum Virtual Machine (EVM), which is an essential part of the Ethereum blockchain.
How do they work?
In simple terms, a smart contract works as a deterministic program. It executes a particular task when and if certain conditions are met. As such, a smart contract system often follows "if… then…" statements. But despite the popular terminology, smart contracts are not legal contracts, nor smart. They are just a piece of code running on a distributed system (blockchain).
On the Ethereum network, smart contracts are responsible for executing and managing the blockchain operations that take place when users (addresses) interact with each other. Any address that is not a smart contract is called an externally owned account (EOA). Thus, smart contracts are controlled by computer code, and EOAs are controlled by users.
Basically, Ethereum smart contracts are made of a contract code and two public keys. The first public key is the one provided by the creator of the contract. The other key represents the contract itself, acting as a digital identifier that is unique to each smart contract.
The deployment of any smart contract is made through a blockchain transaction, and they can only be activated when called by an EOA (or by other smart contracts). However, the first trigger is always caused by an EOA (user).
An Ethereum smart contract often presents the following characteristics:
Distributed. Smart contracts are replicated and distributed in all nodes of the Ethereum network. This is one of the major differences from other solutions that are based on centralized servers.
Deterministic. Smart contracts only perform the actions they were designed to, given the requirements are met. Also, the outcome will always be the same, no matter who executes them.
Autonomous. Smart contracts can automate all sorts of tasks, working like a self-executing program. In most cases, though, if a smart contract isn't triggered, it will stay "dormant" and won't perform any action.
Immutable. Smart contracts can't be changed after deployed. They can only be "deleted" if a particular function was previously implemented. Thus, we may say that smart contracts can provide tamper-proof code.
Trustless. Two or more parties can interact via smart contracts without knowing or trusting each other. In addition, blockchain technology ensures that data is accurate.
Transparent. Since smart contracts are based on a public blockchain, their source code is not only immutable but also visible to anyone.
Can I change or delete a smart contract?
It's impossible to add new functions to an Ethereum smart contract after deployed. However, if its creator includes a function called SELFDESTRUCT in the code, they are able to "delete" the smart contract in the future - and replace it with a new one. In contrast, though, if the function isn't included in the code beforehand, they won't be able to delete it.
Notably, the so-called upgradeable smart contracts allow developers to have more flexibility over contracts' immutability. There are many ways to create upgradeable smart contracts, with varying degrees of complexity.
Taking a simplified example, let’s imagine that a smart contract is divided into multiple smaller contracts. Some of them are designed to be immutable, while others have the 'delete' function enabled. This means that part of the code (smart contracts) can be deleted and replaced, while other functionalities remain intact.
Advantages and use cases
As programmable code, smart contracts are highly customizable and can be designed in many different ways, offering many kinds of services and solutions.
As decentralized and self-executing programs, smart contracts may provide increased transparency and reduced operational costs. Depending on the implementation, they can also increase efficiency and reduce bureaucratic expenses.
Smart contracts are particularly useful in situations that involve the transfer or exchange of funds between two or more parties.
Smart contracts are made of computer code written by humans. This brings numerous risks as the code is subject to vulnerabilities and bugs. Ideally, they should be written and deployed by experienced programmers, especially when involving sensitive information or large amounts of money.
Other than that, some argue that centralized systems can provide most of the solutions and functionalities offered by smart contracts. The main difference is that smart contracts are running on a distributed P2P network, rather than a centralized server. And because they are based on a blockchain system, they tend to be either immutable or very hard to change.
Being immutable can be great in some situations, but very bad in others. For example, when a Decentralized Autonomous Organization (DAO) called "The DAO" got hacked in 2016, millions of ether (ETH) were stolen due to flaws in their smart contract code.
It's important to note that the problem didn't come from the Ethereum blockchain. Instead, it was caused by a faulty smart contract implementation.
Another limitation of smart contracts is related to their uncertain legal status. Not only because it's in a grey area in most countries, but also because smart contracts don't suit the current legal framework.
For example, many contracts require both parties to be properly identified and over 18 years old. The pseudonymity provided by blockchain technology, combined with the lack of intermediaries, may threaten those requirements. While there are potential solutions to this, the legal enforceability of smart contracts is a real challenge - especially when it comes to borderless, distributed networks.
Some blockchain enthusiasts see smart contracts as a solution that will soon replace and automate a great part of our commercial, and bureaucratic systems. While this is a possible reality, it's probably far from becoming the norm.
Smart contracts are certainly an interesting piece of technology. But, being distributed, deterministic, transparent, and somewhat immutable can make them less appealing in some situations.
Essentially, criticism relies on the fact that smart contracts are not a suitable solution for many real-world problems. In fact, some organizations are better off using conventional server-based alternatives.
When compared to smart contracts, centralized servers are easier and cheaper to maintain, and tend to present a higher efficiency in terms of speed and cross-network communication (interoperability).
There is no doubt that smart contracts caused a big impact in the world of cryptocurrencies, and they certainly revolutionized the blockchain space. While the end-users may not interact directly with smart contracts, these are likely to power a wide range of applications in the future, ranging from financial services to supply chain management.
Together, smart contracts and blockchain have the potential to disrupt almost all areas of our society. But only time will tell if these groundbreaking technologies will manage to overcome the many barriers to large-scale adoption.