When approaching the world of Blockchain as a developer for the first time, a very important question arises: where do I start? There are almost 10 thousand cryptocurrencies and projects already out in the field, each with its own respective internal dynamics. With so many options on the market, it’s necessary to try to clarify what really makes sense for you to focus on and what doesn't.
Undoubtedly the two most important cryptocurrencies, both for the capital behind them and the resonance throughout the decentralized world, are Bitcoin and Ethereum. In this article, I’ll try to shed light on the substantial differences that exist between these two projects from the point of view of the programming language they use.
What is Bitcoin?
Bitcoin is the world's first cryptocurrency, developed by a secret someone under the pseudonym Satoshi Nakamoto. The construction and development of BTC took more than 40 years of research and included the failure of a lot of projects such as BitGold, B-money, ECash, and HashCash. Each of these projects failed in its attempt to decentralize the monopoly of currency and overcome central bank control in money management. In 2008, all of the failures and inventions allowed Bitcoin to take shape. Like all cryptocurrencies in general, Bitcoin uses the Blockchain, which is a distributed ledger that can save all transactions occurring in the network in a decentralized and efficient manner. Bitcoin uses a non-Turing Complete language that makes the cryptocurrency much safer from bugs and external attacks but necessarily exposes developers to the rigidity of the chosen “language” (as we will see later).
What is Ethereum?
Ethereum, on the other hand, is defined by insiders as the Altcoin (or Alternative coin) par excellence. Born in 2015 from the idea of Vitalik Buterin, this cryptocurrency is very peculiar. It uses a virtual machine called EVM (Ethereum Virtual Machine) to run decentralized contracts that can self-execute upon receiving particular inputs. It uses Ether (ETH) as a currency to create and update the status of these contracts and uses a complete Turing programming language called Solidity to create them. With great power comes great responsibility - and for this reason, it can bring benefits but also great risks.
How are Bitcoin and Etherem different?
Many consumers and users entering the market think that these protocols are interchangeable and they do the exact same thing. In reality, the two currencies are very different. The fundamental difference between Ethereum and Bitcoin is this: Bitcoin was born to be an exchange currency and to decentralize the monopoly of money by banks, while Ethereum was born to be a platform for the development of Smart Contracts and decentralized software products.
As you might have guessed, the monetary usage of Bitcoin requires that transaction speed and the expressiveness of its programming language be sacrificed in order to achieve very robust security and consensus algorithm. In contrast, Ethereum, given its value proposition, needs high transaction speed and malleability of its programming language, but it doesn’t need to have such a large focus on security. As mentioned earlier, the major difference from the point of view of the language these protocols use is centered around the topic of Turing Completeness.
Programming Bitcoin: the Scripting Language
Given the need to have large security for the management of money and amounts moved, Bitcoin needs a robust language that won’t introduce dependencies or possible bugs. This is precisely why Bitcoin is said to intentionally use a non-Turing Complete language within which there are no loops, logic flows, or huge computations. Instead of being expressive, Bitcoin uses a scripting language in which conditions are specified for spending BTC sent from one user to another. Similar to Forth, the script is simple and stack-based (or even Push Down Automaton). Within a script, two fundamental parts are required to actually ‘spend’ the Bitcoins: a public key of the BTC recipient (typical of asymmetric key communications) and a digital signature of the sender to prove actual possession. In addition to the conditions required by the protocol, there are other conditions that can be set to create different types of spending conditions. For example, you can create spending conditions where you need to have two private keys, a combination of keys, or even none.
Programming Ethereum: Solidity and Smart Contracts
All the reasoning and logic behind Bitcoin completely lose sense when we consider Ethereum. As mentioned, Ethereum needs a strong malleability of code and language used in order to meet the demands of Smart Contract developers. Solidity, in fact, is a Turing Complete language that allows you to write decentralized software capable of self-execution and to cover a very wide range of use cases that are increasingly making their way into everyday life. Examples such as fungible tokens, NFTs, and Decentralized Finance are just some of the areas that Solidity and Smart Contracts have managed to create. From Decentralized Finance (or DeFi) came sectors such as decentralized Borrowing/Lending, Automated Market Makers (AMMs), derivatives on top of the Blockchain and so much more.
The decentralization of finance with this software is very powerful and has come to manage, in total, nearly $90 billion between all of DeFi. The underlying issue is security, which still requires this software to be Audited several times before releasing to production. However, it's not new exploits and bugs that have led users to suffer huge losses (we’re talking hundreds of millions of dollars). Many security properties of Smart Contracts are inherently difficult for developers, and Solidity's Turing Completeness makes automatic verification of arbitrary properties impossible to determine. That's why more and more Audit companies, usually security firms focused on mitigating technical debt and security risk for projects that build DeFi, are springing up in the industry and trying to set standards.
If you've made it this far congratulations!! You now have a better understanding of one of the most important differences in the Blockchain world that a lot of ‘experts’ still struggle to grasp. Bitcoin and Ethereum are two very different technologies and compete in two completely different fields.
If you’re new in the field and looking to start programming, popular advice is to start with Solidity, given its simplicity and correspondence with languages and concepts, such as OOP. Also, Solidity offers a lot of documentation and a very active community to solve any problems. Bitcoin requires a lot of technical knowledge which is different from traditional software development. Bitcoin, as explained above, is a cryptocurrency that is reluctant to change in the main layer but offers huge opportunities in layer 2 such as Lightning Network.
So don't be shy, start building web 3.0 too!