Contributing to the Bitcoin Core project

During the last 8 months I have discovered quite an interest in Bitcoin. Initially the attraction was because of the investment potential but gradually I also grew fascinated by the details of the technology. It suddenly dawned on me that this was an open source project and I could contribute if I wanted to. I started investigating the possible routes that could be taken to achieve this goal. This article will discuss some of these routes and the skills that are needed to contribute. I will conclude the article by expanding on the routes that I have chosen and why.

Development

This is the most exciting route to follow as it is very prestigious to be associated with such a significant project. It is true that anyone can contribute to the code however if you are new to the community then it is very difficult to suggest or carry out changes as you would not have the credibility no matter how good you are at software development. The majority of the code is written in C++ so you would need to be skilled at that. All the source is publicly available in Github. The first step is to fork the repository on github so that you have your own copy of the source. The source can then be changed and then a “”pull request” created for it. A pull request is particular to Github and more information can be found here: Github pull requests .The community can then comment and engage with the developer once they are notified about the pull request. Once the community is happy then the Github administrator will merge the change into the Master branch where source code checks are done and also automated test cases are run against the code.

Hosting a full node

If you have at least 128GB of hard drive space, 2 gigs of ram and a reliable and uncapped connection to the internet then you can run a full Bitcoin Node on your computer. The node stores a full copy of the blockchain and will validate transactions that arrive on the payment network. The security of the network is maintained by honest nodes that independently validate transactions and by running a Bitcoin Node privately you assist with this. This is not the same as mining so there is no special hardware requirements except the few shown above. In order for the node to be effective it needs to be run everyday for up to 6 hours at a time and ideally should run continuously.

Documentation

The bitcoin.org site has a significant amount of documentation and much of it has not been thoroughly reviewed. It is helpful to review the documentation even if you are not a technical person as most of it is meant for beginners to read. Once you have found documentation that has errors in it then you would need to fork the repository, do your changes and then create a pull request which can be reviewed by the community before it is merged into the master branch. The bitcoin documentation follows the same markup used by a wiki so this markup would need to be learnt so that the changes are done using the correct tags.

Reviewing Pull Requests

A pull request needs to be created for any change carried out so that it can be reviewed by the bitcoin community. All development and reviews are done by volunteers that support the community and most of these people have day jobs. This makes the review process extremely slow as they are done when people have time to do them. One of the ways to assist is to review pull requests and make a comment on them. It could be as simple as “Looks good to me” or more detailed comments can also be done. Some of the changes being done are simple corrections on documentation and these can be easily verified by anyone especially if there are no technical details involved.

Test cases

Testing is one of the bottlenecks in the development cycle as there are more pull requests than tests. Most of the code has a variety of unit and integration tests and all new developments will come with test cases. However if you feel that the test coverage is not complete then it is very helpful to create those test cases so that it can be used for future testing.

It can be quite daunting getting started as the technical skills required are deep. I initially wanted to do code contributions but most of the code is in C++ which I am not skilled at. I decided to contribute by doing what my current skills allowed but also in parallel building up the skills required to contribute further. Here are the tasks that my current skills allow and which I started doing:

  • I have some knowledge of GIT so I forked the repository and downloaded the source code. I also reviewed the pull requests that I could understand and made comments.
  • I registered on the stack exchange community site Bitcoin Forum. This is quite a vibrant bitcoin community that asks questions and receives answers from volunteers. I have acquired some bitcoin knowledge from reading three books and doing the Princeton bitcoin course. This has allowed me to answer questions which assists the people that are struggling with these issues. I have currently accumulated 68 points from answering and asking questions and earned 6 bronze badges.
  • I have upgraded my internet connection to fibre and with an unlimited 20mbs line. This has allowed me to run a full bitcoin node which assists the community as honest nodes help with the security of the network. The initial synchronization with the network takes about 48 hours continuously. I did this over 4 weeks though as I did not leave my laptop running overnight to synchronize. The bitcoin core software allows you to stop the synchronization and it continues from where you left off when you open the application.
  • I have begun the process of reading the bitcoin core documentation looking for grammatical errors and also information that is hard to understand. I have not done a pull request for documentation yet but I am hoping I will be able to do one this year.

In addition to this I am developing the following skills in order to contribute to the project:
  • C++. I am working through C++ tutorials to learn the basics. I also started reading through the bitcoin source code to understand the constructs used and what language fundamentals I should learn. This is a not a short term commitment because it will take months if not years to get the skills required to contribute meaningfully to the project.
  • Source Compilation. I am working on getting a bootable linux partition on my laptop in order to start doing source compilations and understanding how the bitcoin application lifecycle works.
  • Rest API. I am working with the bitcoin rest API to understand all the API calls and doing small applications to test them out. This will increase my knowledge of the API’s and I will be able to contribute by testing the functionality and making sure it works as documented.


  • I hope that that it is quite clear that contribution is possible even if you don’t have a high level of technical skill. I remember a colleague of mine once commenting that he did not understand why developers would spend so much of time contributing to a project that did not provide any monetary return. It is actually quite simple, most people value recognition and acceptance far more than monetary gain. Contributing to the bitcoin core project provides people with an opportunity to be part of something really great and if other members of the community recognize them for the effort then it is worthwhile. For more information on contributing to bitcoin, read the following excellent article A gentle introduction to bitcoin core development

    Contributing to the Bitcoin Core project

Leave a Reply

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