Nobody Understands Bitcoin (And That’s OK)

lopp-1
11 March 2017

Jameson Lopp is a software engineer at BitGo, creator of statoshi.info and founder of bitcoinsig.com.

In this guest feature, Lopp provides a deep dive into whether bitcoin can truly be understood as a technology, coming up with more questions than answers and delivering an impassioned appeal to open-mindedness and exploration.

When I first became interested in bitcoin, I found myself spending countless hours absorbing as much information about it as possible, trying to put all of the pieces together.

After years of learning, I now devote a fair amount of my time trying to help others understand bitcoin better. While many people have referred to me as a “bitcoin expert,” I still consider myself a student – I have yet to determine how deep the rabbit hole goes.

Andreas Antonopoulos had this to say about explaining (and thus understanding) bitcoin:

“I wrote a book that answers the question ‘What is Bitcoin?’ It’s 300 pages long, was obsolete the moment it was printed and has to be corrected and updated every three months just to keep up with changes.”

The multifaceted nature of bitcoin

With enough studying you can teach yourself how bitcoin currently works from a technical standpoint.

I maintain a list of educational resources that is sufficient to keep anyone busy for several months in pursuit of this goal. However, this approach of information ingestion will only expose the tip of the bitcoin iceberg.

Meltem Demirors posted a chart that’s spot on:

One challenge to understanding bitcoin is that it is a multifaceted cross-disciplinary system that is constantly evolving.

Ferdinando Ametrano put it well:

Ferdinando hits a key point that I’ll be delving into – bitcoin is not just a technology; it’s a technology that represents something even less tangible.

Bitcoin is a living protocol that emerges from a melting pot of ideas, philosophies, cultures and politics after they undergo trial by fire.

You can read the “Rise of the Cypherpunks” to learn how we came to be where we are today.

Satoshi’s understanding of bitcoin

“Writing a description for this thing for general audiences is bloody hard. There’s nothing to relate it to.” – Satoshi, July 5, 2010

Even Satoshi didn’t fully understand what he built with regard to bitcoin’s security model. He (or she) ended up fixing a multitude of bugs in the first few years of bitcoin’s existence.

After it was 18 months old, the rate of bug fixes had slowed down to the point that new vulnerabilities were categorized and documented. Let’s cover a few of the flaws that were fixed before bitcoin gained adopters.

In the first versions of bitcoin, anyone could spend anyone else’s coins:

“The opcode OP_RETURN originally just caused the script to end early instead of fail, so you could steal anyone’s bitcoins by simply using the scriptSig OP_TRUE OP_RETURN. It was also possible to put a pushdata opcode right at the end of a scriptSig to turn the entire scriptPubKey into a constant (which evaluates to true). Satoshi fixed these bugs by changing the behavior of OP_RETURN to cause the transaction to immediately fail and making it so that scriptSig and scriptPubKey are evaluated in two separate steps.”

– Theymos

Satoshi fixed a major consensus flaw by changing the ‘best chain’ logic from using the longest chain to using the chain with most proof-of-work. Technically, it could be argued that this was a hard fork, though it didn’t actually cause a chain fork because the longest chain at the time was also the one with the most proof-of-work.

Satoshi also set the block-size limit as protection against denial-of-service attacks. The block size was originally only implicitly limited by the network message size of 32MB.

There is also a bug in OP_CHECKMULTISIG that exists to this day. It’s mentioned in BIP-011:

“(OP_0 is required because of a bug in OP_CHECKMULTISIG; it pops one too many items off the execution stack, so a dummy value must be placed on the stack).”

– Gavin Andresen

And who could forget the value overflow bug that allowed someone to create 184 billion bitcoins!

In my quest to find more early Satoshi bugs that aren’t well-known, Greg Maxwell recalled a juicy one:

“In the early versions of bitcoin, any user could hard fork any released versions from any other versions! This design flaw showed he didn’t fully understand the required conditions for safe upgrades when it was first released, but his fix showed he did understand them later.

There was an opcode called OP_VER which pushed the verifying node’s version number onto the stack. (Satoshi always believed there should only be one piece of bitcoin node software.) The apparent purpose of that opcode was so that you could add features to script and have only the newer supporting versions see those new opcodes (there also was originally 16 bits of opcode space in the codebase.) But someone could have used this maliciously like “OP_VER 1234 IF FALSE RETURN ENDIF TRUE” to make version 1,234 reject a block mined by any other version. So, any user could make the system fork any any time! When he removed OP_VER, he added the OP_NOP, which is what makes modern style script soft forks possible. This change itself was a soft fork because the original versions ignored unknown opcodes.”

Researchers have also discovered some flaws in Satoshi’s white paper regarding the description of the system’s security.

For example, there are issues of ‘miner luck’ and ‘selfish mining‘. There is even a compilation of known problems with the white paper available here.

Bitcoin clearly didn’t follow a ‘code is law’ view, but rather ‘Satoshi’s vision is law’ given that he made a number of tweaks in the first few years as it was discovered that the code didn’t fully align with the intent of the code creator.

I think this distinction is particularly relevant given that: a) Satoshi stopped contributing to bitcoin many years ago, and b) bitcoin has no formal specification.

Software is never finished

You can tell how little bitcoin is understood simply by the vast amount of research being done to analyze and improve upon it.

Satoshi once stated that the core design was set in stone and other implementations would be a menace to the network. People often take this quote (and others from Satoshi) and use it to fallaciously argue (via appeal to authority) that the bitcoin protocol must evolve in a specific way.

I pose to you that this was just another case where Satoshi was mistaken.

As we’ve seen, Satoshi actually had to make a lot of changes to bitcoin as early developers were exploring the code and discovering edge cases. There are also over half a dozen bitcoin client implementations running today that aren’t disrupting the network. We have even seen that a single implementation can be a menace to the network when machine-level differences can cause consensus failure, as happened in 2013 with the Berkeley DB chain fork.

Recall my earlier description of bitcoin being the result of a melting pot of contributions. This really took hold once Satoshi released his pet project that he had been working on in secret for several years.

The very first week that bitcoin launched, it also gained its first collaborator, Hal Finney. Hal was one of the few people who believed early on that bitcoin could actually work, which is clear from Satoshi’s original white paper release:

“[Hal Finney] allegedly showed a lot of flaws in the early code, which were fixed by reducing the opcodes. Hal Finney was the cypherpunks’ cypherpunk. He had a rare ability to both code superlatively, see the forest and the trees and describe what he saw. We all read his posts carefully, I don’t think there is anyone else who commanded such respect.”

– Ian Grigg

Finney released a number of his emails with Satoshi to the Wall Street Journal; they’re an interesting read. You can see Satoshi’s surprise as he manages to find several bugs that Satoshi had not anticipated even though he had “tested heavily”.

Unlike some systems (such as ethereum), bitcoin doesn’t have a formal specification. Even if bitcoin did have one, it wouldn’t be any easier or harder to make changes to the protocol from a technical standpoint, though it might from a social standpoint.

As Charlie Lee noted in response to Andresen’s suggested definition, it’s amorphous:

Nor is there an objective process by which changes are enacted:

Paul Stzorc spoke about making objective decisions with bitcoin development, but it’s far from being realized.

His presentation was based upon this blog post.

I pose to you that bitcoin’s strength comes not from being the embodiment of some dogmatic beliefs of immutability, decentralization or other buzzwords, but from collaboration. The process of taking collaboration and using it to determine human consensus can be noisy and messy, but it’s the governance model within which we must work.

As I see it, this system of governance, rooted in voluntaryism, is the only aspect of bitcoin that is ‘set in stone’.

Bitcoin’s magic

Sergej Kotliar penned this piece years ago describing why bitcoin has similarities to religion. As he notes, there is a bit of magic to the fact that the system works as a whole, because it relies upon non-technical components.

The well-aligned incentives of the system form an “invisible hand” that guides it.

Most bitcoin users probably don’t realize it, but they are subscribing to a sophisticated subjectivist ontology by participating in this collectively reinforced belief in the system of rules that comprises bitcoin.

To put it in simpler terms:

While bitcoin can be described as trustless in the sense that a full node operator needs not trust any other participants on the network, at a meta level there is often some form of trust involved. For example, almost none of bitcoin’s users actually read and understand the software and the protocol itself.

They are trusting the developers to be careful not to introduce flaws.

It appears to me that the fact that few people have a deep understanding of bitcoin’s technical operations results in people with lesser understanding deciding which ‘experts’ to trust. As such, when experts clash, the crowd divides and takes sides behind the experts whose arguments they find most compelling.

Unfortunately, this means that sometimes politics are injected into the decision making process.

As Shaolin Fry recently noted, we should strive to avoid politicization of proposed protocol improvements. To be clear, this doesn’t mean ‘nobody in the ecosystem is motivated by political ideals’. Rather, it means that the direction of the system is not driven by politics in which one group of people forces their beliefs upon another.

For example, the concept of ‘voting’ generally means that a political process is occurring. We should instead strive for a system of permissionless innovation wherein participants can signal that they want to interact in certain ways, regardless of what other participants signal.

“We already have a lot of options for currencies which are (indirectly) controlled by political whim. Bitcoin should be sounder stuff than that. I would love to be able to say that the complete consensus rules on day one were involatile (‘set in stone’) but engineering reality makes that unrealistic. That dream for bitcoin died the day the first unambiguous and serious consensus flaw was found. The deactivation of buggy opcodes further weakened it, requiring more changes to be fully general again. But the world is seldom so conveniently black and white. Bitcoin can still deliver on the promise of being a less political money without being totally set in stone.”

– Greg Maxwell

Projection problems

Some bitcoin users achieve such a sufficient understanding of the protocol that they begin to envision potential improvements, at which point they try to change the system to better fit their perspective.

This is a ‘command and control’ mindset that is human nature; I myself have been guilty of making this same mistake in the past by trying to project my perspective onto bitcoin rather than ingesting the perspectives of the community.

There are far more considerations that go into debates about bitcoin’s evolution than just the technical aspects of how changes would affect the network.

Ryan X Charles covered the high-level philosophies of the two most popular viewpoints in the scaling debates. Much of the contention in these debates comes from: a) different priorities and b) different beliefs in the use cases for bitcoin.

Unfortunately, a significant portion of participants in these debates have taken their perspectives and developed them to the point of dogmatic belief, which makes it nearly impossible to engage in intellectual discourse.

One reason I believe that it is easy for people to project their perspective upon bitcoin is due to its lack of specification and thus lack of clear objectives.

For example, Satoshi described bitcoin as a ‘peer-to-peer electronic cash system’. But even this simple description can easily be interpreted in many ways. ‘Peer-to-peer’ provides no context around how many peers there should be; ‘cash’ provides no context around what the speed or cost of transactions should be.

Much as you can find a variety of perspectives and interpretations of the US Constitution or the Bible or the Quran, so can the writings of Satoshi be interpreted and debated.

The projection of individual perspectives onto bitcoin has led to the same sort of fracturing we can observe in political, philosophical, and religious systems. A group starts out on mostly the same page, but then an issue arises about which the group can not form a consensus.

The individuals begin to polarize their perspectives and support actions that foster tribalism. Party lines are drawn, litmus tests are applied to newcomers, dissenting speech is suppressed, propaganda is perpetuated, communications break down, and echo chambers are formed.

As a result, today, bitcoin debates often devolve into fallacious assertions and name calling, where one party considers the other party to be either ignorant or malicious. This is unfortunate because people often end up talking past each other under the assumption that they are right and the other party is wrong.

It’s troubling to see the ossification of perspectives into dogmatic beliefs that degrade the quality of discourse in the community.

I pose to you that there is no single ‘correct’ approach to viewing bitcoin, but rather a multitude of perspectives. The diversity of perspectives and use cases was the topic of one of the first articles I ever wrote about bitcoin.

I’m not saying that you have to agree with rhetoric propagated by people with conflicting perspectives of what bitcoin should be. I will suggest, however, that you should recognize it as such – not as a malicious attack that you must defend against with a direct counterattack.

If a debate is becoming too heated and discourse is breaking down, you can always disengage.

Keep in mind that all humans fall prey to biases; we can’t avoid being affected by them, but we can consciously choose how we respond to other biased people. It may also help to remember that bitcoin doesn’t need you to defend it – you defend your own perspective of bitcoin by choosing which software to run and by choosing the system in which you store your money.

The Tao of bitcoin

Andreas once spoke about the “noisy” scaling debate.

While it can be unpleasant, we should remember that it is the result of a feature rather than of a flaw in bitcoin.

Bitcoin ecosystem participants should be humble when discussing it rather than confident that our understanding of the system is superior to that of others participating in a discussion. I, for one, have found my conversations to be more productive after making this realization.

I’ve also wasted a lot less time by avoiding conversations that were clearly going to be unproductive due to the dogmatic views expressed by the other party.

You can achieve the ‘Tao of Bitcoin’ by accepting that bitcoin is on its own path that is outside of your control. Don’t be frustrated if your vision of bitcoin does not align with that of other users. Bitcoin will naturally converge upon the least common denominator of human consensus – that which is beneficial (or at least not harmful) to the greatest subset of participants.

The Tao of Bitcoin is not understanding bitcoin, it is accepting that bitcoin is what it is.

Bitcoin breaks bad

I’ve attempted to present sufficient evidence that bitcoin defies conventional educational approaches and even defies self-professed authorities who claim to understand it. The result can be bewildering, but there is no need for negativity.

We should remain hopeful that bitcoin will continue to ‘fail to scale’ just like the internet has.

Jimmy Song also made a great case for optimism in the face of deadlock and despair.

“In short, bitcoin is maturing and the market is starting to define what bitcoin is going to be. I’m sure there are people on both sides of the debate that won’t like what it’s going to become, but that’s what you get with a decentralized currency.”

I will continue my quest to consume as much information as possible about this new ecosystem, but have long since given up the goal of understanding bitcoin.

The faster I run toward the finish line, the further it moves away from me. While some people in this space are more confident than others about its future direction, the truth is that we’re blazing new trails and learning as we move forward.

You don’t understand bitcoin, and that’s OK – neither does anyone else.


Author’s note: Thanks to the many people with a wide variety of perspectives who provided feedback on this article.

Image via Cryptograffiti. Find more images and artwork here.

Seeking knowledge image via Shutterstock