Introduction
The open source community is a huge one with developers remotely collaborating on different projects. To ease this process, they make use of version control portals such as Github, or Bitbucket, to mention a few. Coincidentally, both Github and Bitcoin technologies are both based on what is known as Merkle trees.
So it’s essential you get familiar with Github Concepts such as Push/Pull requests, Cloning a Repository, commit, forking, etc.
Bitcoin being an open source project, make use of Github for project collaboration/ management, documentation, bug tracking, continuous integration, etc. making for easy contribution by any developer across the globe. All that is required to contribute to the Bitcoin project can be found here in the GitHub repository,, but bear in mind that the Bitcoin community is a merit-driven one. Meaning, all that matters is the quality of your work and putting your ego outside the door. A clear description of development is provided in the README. Do ensure you read it as a guide to delivering quality, human-readable code.
When taking a plunge into the Bitcoin developer community, it is crucial for you to set your expectation accordingly. Through hard work and patience, you can learn a lot as well as gain recognition and respect similar to core developers like Peter Wuille, Cory Fields, and Gregory Maxwell.
Further project development discussion is on GitHub and the bitcoin-dev mailing list. For more informal development discussions, check out irc.freenode.net #bitcoin-core-dev (web interface, logs). The developer community is a friendly one, simply respect the guidelines.
Documentation
Every seasoned developer knows that the first go-to source for working on any code or library is to read the documentation. You can start from the README and the contribution guidelines. You can also continue further with the doc directory and read the README there too. All the documentation in the doc directory is described in the README.
Please note that similar to any new endeavor, some things may not make sense to you at the beginning. So do not hesitate to network with community members on IRC, StackExchange , and Slack if you have issues with understanding some concepts way.
Required Skills
Programming Language:
Starting out your contribution to Bitcoin core, essential prerequisites are skills in the two programming languages which are C++ and Python.
Version/Source Control:
As pointed out in the introduction, this is managed through Git. It is necessary that you know how to fetch from the origin, make topic branches and how to rebase. If you’re testing someone else’s code, you should also know how to add multiple repositories to your local development environment so you can fetch and test the code.
Signing up for a GitHub account cannot be overemphasized considering that changes to Bitcoin Core are merged on a Pull request by Pull Request basis on Github.
Last and very important is that you’ll need to know how to install and remove packages on your platform.
Code Review
According to Ken Thompson, one of the co-creators of Unix, “ You can’t trust code that you didn’t create yourself….” Being a Bitcoin Core developer is not an easy route, this is because the Bitcoin core is security software that protects assets worth billions of dollars from different kind of external attacks. Again bear in mind that open source doesn’t imply more secure, which is why experienced developers must review every code changes. Hence your work has to meet a high standard of testing and code review.
It can take a long time for other developers to review your pull requests. Remember that all reviewers are taking time away from their projects to review your pull requests, so be patient, show some respect for their time.
As a way to get your feet wet, you can consider giving it a shot at reviewing other people’s pull requests. You don’t need to be an expert in Bitcoin, the Bitcoin Core codebase, or C++ (although all these things help). There are almost always open pull requests that any programmer can review.
Starter Projects
Often people conclude code contribution as the only contribution to opensource, while in reality, the success of such projects depends on testing and review. Starting off with reviewing and testing will push into deep waters, where you will eventually learn a lot about the code base with more in-depth understanding, compared to writing code.
Do you want to begin coding for Bitcoin Core but don’t have a specific improvement in mind? Here are a few ideas:
- Fix existing issues: Checking out the issue tracker is a great place to find meaningful contributions to Bitcoin Core. It is necessary to comment on issues to ensure someone else is not working on it before starting to write any patches for problems you find.
- Write tests: many tests cover Bitcoin Core, but patches that improve test coverage are always welcome and are a great way to build familiarity with the codebase. See the documentation about automated testing.
Developer communities
The following chatrooms and websites host discussions about Bitcoin development. Please be sure to read their rules of conduct before posting.
- IRC Channel #bitcoin-core-dev on Freenode.
- Bitcoin Core Slack Channel
- Bitcoin StackExchange, The Bitcoin StackExchange, is a good place to get all tricky questions answered.
- BitcoinTalk Development & Technical Discussion Forum
Further project development discussion is on GitHub and the bitcoin-dev mailing list. For more informal development discussions, check out irc.freenode.net #bitcoin-core-dev (web interface, logs).