A smart contract is a computer protocol which was designed with the goal of digitally facilitating, verifying, or enforcing the negotiation of a contract. Through the protocol, credible transactions can be successfully processed without the use of a third party and are trackable and immutable; that is, they cannot be modified or removed after being successfully completed. Their entire purpose for being designed is to provide a higher level of security unattainable by traditional contractual law and to reduce other transaction costs associated with the traditional process.
Byzantine Fault Tolerance (BFT) is the dependability of a fault-tolerant system which is usually a distributed computing system and through BFT algorithms, digital security can be achieved via decentralization to develop and implement smart contracts. Furthermore; there are some programming languages with varying degrees of Turing-completeness (which basically means the language can be used to create a Turing machine; a mathematical model of computation) as a built-in feature for some blockchains and allow the creation for some sophisticated and custom smart contracts. As such, these two main things allows for smart contracts to be used and implemented in various different ways.
The most common use of smart contracts at the moment is within the space of cryptocurrencies and blockchain technology thanks to the Ethereum Network and their revolution of blockchains. The cryptocurrencies are decentralized and offer great security, encryption, and limited trusted parties which is actually the main dream envisioned when they were designed. Bitcoin, possibly the most popularly known cryptocurrency, has their own implementation of this as they also provide a Turing-incomplete Script Language which can be used to create their own smart contracts as well. As mentioned before however; it is Ethereum who implements an almost Turing-complete language on its blockchain which makes it the most prominent smart contract framework in the modern world today. Along with these, there are also Namecoin, Ripple, and Automated Transactions, all of which have their own implementations of smart contract frameworks for the use of their creation.
One of the most common issues right now faced with smart contracts; especially on a blockchain, is its visibility to all members on the blockchain. Because all members of the blockchain can see the contract, it also means that the contract’s bugs and security vulnerabilities are also visible to members of the blockchain as well which invites them to take advantage of it in some way. Furthermore; these issues may not be quickly fixed by the time the entire blockchain notices them and as such, can be taken advantage of quickly. For example, in 2016, The DAO was drained of $50 million US dollars in Ether by an attack while developers were trying to come to a solution on one of these vulnerabilities. Thankfully, The DAO program had a time delay implemented before the attacker could remove the funds and a hard-fork of the Ethereum software was accomplished to get the funds back before that delay expired. Such issues like this are very common in Ethereum’s smart contracts and include their smart contract language Solidity, compiler bugs, Ethereum Virtual Machine bugs, and the blockchain network attacks as well. When also considering that these bugs are immutable and there is no central source documenting known vulnerabilities, attacks, and problematic constructs, the issues Ethereum currently face are quite severe