Developing Bitcoin

written by OKCoin

Developing Bitcoin

How does Bitcoin stay decentralized and simultaneously adapt to growing usage?

By Olivia Lovenmark and Amiti Uttarwar

Bitcoin is a paradigm shift for community-based decision making. The software that supports Bitcoin was originally developed by the pseudonymous Satoshi Nakamoto, but since Bitcoin launched in 2009, the needs for network capacity, security, and reliability have changed dramatically.

TL;DR

  • The Bitcoin network consists of thousands of nodes running all over the world.
  • Mental models help to understand decentralized consensus: how ants choose where to source food from, and how bees choose to relocate to a bigger hive.
  • As the network grows, so do the demands from the software. Like the network, the development process is decentralized. The community decides which changes to adopt based on a rough consensus model.
  • Proposed changes to the Bitcoin protocol are made via Bitcoin Improvement Proposals (BIPs) which provide a standard for communicating new features to the community.
  • Contributing to Bitcoin Core involves proposing and reviewing code via pull requests. Maintainers evaluate the community consensus to determine if a change is ready to be accepted for the next release.
  • A new version of Bitcoin Core is released approximately every six months. Users who accept the changes upgrade their software to the latest version of Bitcoin Core.

Bitcoin is a decentralized network with no central authority, and so is the Bitcoin development ecosystem. Contributors to Bitcoin have become responsible for Bitcoin’s ability to scale, supporting growth from just a handful of transactions to over 325,000 daily transactions.

An introduction to the Bitcoin network

Bitcoin is a decentralized network powered by thousands of diverse, global entities independently tracking and verifying the shared ledger. Any computer participating in the Bitcoin network by running compatible software is called a node.

The software works today, but it is far from complete. Improvements are necessary for Bitcoin to realize its full potential as a truly uncensorable global money. Security is one example; while it may be prohibitively expensive to execute an attack today, the incentives change if the price is an order of magnitude higher. On the other hand, some aspects are crucial to preserve, such as the emission schedule that enforces a maximum supply of 21 million Bitcoin ever being created.

So, how do we make changes?

In this post we highlight the unique decentralized process that enables changes to Bitcoin software while adhering to the fundamental qualities that define Bitcoin.

At a high level, anyone can propose changes and a rough community consensus determines whether they are accepted for the next release. These changes update the Bitcoin software, which is run by nodes. Critically, each node operator explicitly decides whether they want to accept the latest changes, and their ability to continue participating in the network is not hindered if they decide not to upgrade.

The Bitcoin development ecosystem embraces the decentralized goals of the Bitcoin network, upholding the ideal of financial empowerment to individuals.

Mental models for a decentralized ecosystem

Most of our societal systems are centralized or hierarchical, from the organizational chart of your workplace to the methods you use to acquire groceries. This trust model is so intimately familiar that it can be hard to fathom possibilities for alternative systems. Before we look at how Bitcoin is developed, let’s look at decentralized decision making techniques that occur naturally in the world around us.

Language

Language is an age-old example of a decentralized model within society. Language is open-source; it’s decentralized and evolves over time. Languages that become popular are done so by singular votes, represented by people adopting the language and contributing to a movement of communication.

Ants

Ants gather food through a decentralized decision making process. It starts with a random search for food. Once food is found, an ant takes the food in the fastest way possible back home to the colony. Once home, the ant releases a pheromone, with strength of release indicating size of food available. Ants have a biomass that is an order of magnitude higher than humans — the system works.

Bees

Bees are similar to ants; they have a dance. When bees are looking for a new, bigger hive, they’ll go and find different options. They’ll come home and do a “waggle” dance to demonstrate how good the new home is. Bees will ‘vote’ on which new home they should go to by copying a dance move. This gains traction and a new home is chosen. This video demonstrates the waggle dance — as also seen in our GIF above.

While the waggle dance may look chaotic, it’s a successful system of decentralized decision making. Similarly, an open-source codebase may seem chaotic, but by communicating through a decentralized process of PRs and commits, Bitcoin developers demonstrate their own effective ‘consensus dance.’

The Bitcoin development ecosystem

So let’s take a look at the Bitcoin waggle dance; how the community decides when to make changes.

The difference between the Bitcoin protocol and Bitcoin Core

The Bitcoin protocol defines the communication rules to participate in the network. It specifies how a node should interpret the messages it is being sent, including the rules to validate blocks and transactions.

Bitcoin Core is the most commonly used software implementation that adheres to the Bitcoin protocol. For example, it specifies how users can interact with the node to manage wallet funds. In this case, the protocol defines transaction validity and the implementation specifies how a user creates that precise transaction.

Developing the Bitcoin protocol

Proposed changes to the Bitcoin protocol are made via Bitcoin Improvement Proposals (BIPs). BIPs provide a standard for communicating new features to the community. “BIPs can include consensus-critical changes (like soft fork and hard fork protocol upgrades), but also other changes that benefit from coordination across different Bitcoin software implementations, such as changes to the peer-to-peer layer or new backup seed formats,” an article from Bitcoin Magazine explains.

As a proposal is being developed, it’s primarily discussed on the mailing list, and then turned into a draft BIP. As a BIP, it goes through the community consensus process in order to get enough support to be accepted.

Current BIPs include notable changes to the protocol like current BIP 340 (schnorr signatures), BIP 341 (Taproot) and BIP 342 (Tapscript). Together, these BIPs would introduce smart contract flexibility and privacy features to the Bitcoin protocol.

Developing Bitcoin Core

Bitcoin Core is a project hosted on GitHub. In addition to the code being open-source, there is a decentralized review process that relies on the community.

Anyone can see the code, offer a change, and review other proposals. This process, facilitated through pull requests (PRs), enables community members to test the change, identify bugs and discuss potential risks. Reviewers can express they believe the changes are ready by leaving an “ACK”. Maintainers use these signals to assess the community consensus and determine whether the change is ready for the next release.

The full contribution process is found here. The review process is crucial to enabling a community consensus that allows Bitcoin Core development to be decentralized.

Releasing Bitcoin Core upgrades

Approximately every six months there is a release process that bundles up the proposed changes. At this stage, translations are added, providing multi-language support that assist in Bitcoin’s global adoption and growth. The bundle is then released to the community and tested for further feedback about any problems before it is released widely.

All Bitcoin node operators have a choice of whether to upgrade to the latest version of Bitcoin Core. Every node operator has the power to decide whether they want to adopt the recent code changes or not — they are not forced to upgrade. The developer ecosystem takes great care to ensure backwards compatibility, which is fundamentally different from many software projects today.

Inefficient in the short term, efficient in the long term

Challenges of a decentralized development ecosystem

Normally, businesses develop roadmaps to efficiently coordinate efforts to achieve their goals. Well defined organization hierarchies help make difficult decisions and resolve inevitable conflicts.

A decentralized development process has to deal with the inefficiencies of lacking such tools. The review backlog represents the biggest bottleneck for implementing changes in Bitcoin Core, demonstrating a consequence of self-organized task management.

For example, say two contributors propose alternative implementations for the same feature. In addition to their repeated efforts, reviewers might take longer to understand the different options. In turn, it is possible for neither implementation to gain enough traction to be accepted. At face value, this can look like a lot of wasted effort- maybe either solution would have worked, but instead end up augmenting the pile of PRs waiting for review.

The process of reviewing, accepting, and maintaining changes requires ongoing use of human resources for the project. Long-term contributors need to ensure that the project remains maintainable- not all contributions can be incorporated. From the perspective of an individual, it can be disheartening to work on something you believe benefits the system, propose those changes, and then receive silence instead of attention or reviews.

Benefits of decentralized development

These challenges also present a community benefit; efforts are coalesced around popular concepts and contributions, rather than work being pushed through the process that hasn’t found support. In this way, having a lot of people testing out hypotheses can be considered a feature, not a bug.

The change-averse nature of the project embraces the idea that money requires trust, which is slow to build, but quick to destroy. It’s okay that not all ideas are implemented; if an idea isn’t receiving attention for review, perhaps that’s an indication of its value to the project. Each individual who decides to contribute also decides what to focus on. Much like the waggle dance, this can feel chaotic, but results in a decentralized decision making process.

This is very different from a centralized approach where, for example, a whole company of people might be working hard to execute a hypothesis by the founder or CEO, then discover weeks, months or even years later that the approach was not viable. The Bitcoin development and review process is a fundamental paradigm shift that strives to embrace the voice of all individuals who choose to participate. The absence of a centralized leader eliminates a single point of failure.

The project implements creative solutions to help coordinate efforts. For example, a community initiative encouraged in-depth review of the proposed schnorr/taproot softfork, and the PR review club is a weekly meetup to help contributors onboard and familiarize themselves with Bitcoin Core code.

While decentralized development may seem inefficient, it supports a dedicated and passionate community, producing a robust codebase and supporting a growing industry. Bitcoin is a community project based on input from contributors, reviewers, and maintainers across the globe. As the largest cryptocurrency by adoption and market capitalization, this project underpins a multibillion dollar industry.

Yet, this asset is backed by a small number of devoted people and is a severely resource-constrained project. At the time of writing, 751 individuals have contributed code to Bitcoin Core, but only a few dozen are longstanding contributors. For Bitcoin to continue to effectively scale and support the crypto industry, it needs your help!

Learn more about Amiti Uttarwar and OKCoin’s open-source developer grant program.

Leave a Reply

Your email address will not be published. Required fields are marked *