Bitcoin Limitations

Understand what problem Ethereum is solving.

In the previous lesson, we learned the short history of how Bitcoin was invented and what problem it was solving. In this lesson, we'll focus on Bitcoin’s limitations and how practitioners started to look for alternative solutions.

Bitcoin limitations

After Bitcoin's initial adoption, developers worldwide started to think about how they could use some of Bitcoin’s ideas in their own projects. They were fascinated by the idea of having a global, decentralized, peer-to-peer network with no entry barriers and wanted to apply this technology to other fields.

If Bitcoin can track ownership of digital currencies, why not adopt it to track the ownership of something else? For example, we could have a network that could track domain ownership, which would allow the creation of a decentralized, peer-to-peer DNS. Other ideas included prediction markets, land registries, custom currencies, games, etc.

Initially, developers tried to build these projects on top of the Bitcoin network itself. However, there are at least two significant issues with building new projects on top of Bitcoin.

  1. Bitcoin has very limited support for storing arbitrary application data. It was designed specifically to store a history of transactions. These transactions can include a small amount of arbitrary unstructured data, but this is laborious to use for any complex application. Bitcoin participants can verify a Bitcoin transfer and how it affects the users’ Bitcoin balance, but they can't verify changes to arbitrary data written by third-party applications.

  2. Bitcoin provides very limited programmability. Contrary to a popular misconception, we can write simple scripts on top of Bitcoin and extend Bitcoin in this way. However, the scripting language is very restricted, and it doesn't even have support for such basic constructs as loops. What makes writing those scripts even harder is that they're written in a low-level assembler-like language. Here's a simple code example from a Bitcoin script:

OP_DUP OP_HASH160 [hashOfPublicKey] OP_EQUALVERIFY OP_CHECKSIG

Since this is not a Bitcoin course, we won't try to decipher this; but even with this small example, we can get an idea of how challenging this language is. Imagine how hard it would be to write a complex application using it.

However, a few projects attempted to build on top of the Bitcoin network. For example, the Colored Coins project aimed at tracking real-world asset ownership on the Bitcoin network. Another project that used a similar approach was Mastercoin. It was built on top of Bitcoin and sought to extend its functionality with features to support other financial applications. These approaches were very “hacky,” and neither got any significant traction.

Other blockchain projects

Since it was hard to build new projects on top of the Bitcoin network, developers started to look for alternative approaches. Why use something not fit for the purpose if we can build something new? After all, Bitcoin’s source code was open-sourced, and anybody could read, copy, and change it.

One of the first projects that tried to capitalize on Bitcoin’s ideas was Namecoin, a decentralized domain name system. Like Bitcoin, it had its currency and was based on blockchain technology. However, in contrast to Bitcoin, it was designed to store domain names instead of a ledger of financial transactions.

Namecoin
Namecoin

While some teams were able to bootstrap these projects, it was a long and laborious process. Not only did they have to implement the core logic of their application, they also had to create their own blockchain implementation. This notoriously complex task requires specialized knowledge and is very hard to get right.

A rough analogy for developing blockchain projects at the time was like developing a pre-iPhone mobile phone that only supported a fixed set of applications, and there was no easy way to add new applications to it once it entered production. Imagine developing a mobile phone just to have a platform to run a new application!

Neither using the Bitcoin network nor building custom blockchains were suitable long-term solutions. There was a strong need for a more flexible and easy-to-use platform. This is precisely where the idea of Ethereum came from, and in the next lesson, we'll see how it solved this problem.

Summary

In this short lesson, we’ve looked at how the limitations of Bitcoin made it unsuitable for building other applications on top of it. Developers tried to build applications on top of Bitcoin or develop their application-specific blockchain networks, but neither of these approaches gained significant traction. This, in turn, created a need for a new approach pioneered by Ethereum.