#1 - The Summer of Bitcoin Experience
How a beginner developer can start contributing to bitcoin core, chat with SOB 2022 intern Anmol Sharma on his bitcoin dev journey and best bitcoin jobs for freshers!
Hello Summer of Bitcoiner!
Ever wondered what it takes to contribute to Bitcoin Core? In this inaugural newsletter of The Summer of Bitcoin Experience, we delve into how an interested individual can contribute to the bitcoin ecosystem by going straight to the heart of it all - the bitcoin reference implementation!
An absolute beginner’s step-by-step guide on how to get started with Bitcoin Core development:
If you're a software developer who is new to bitcoin, contributing to Bitcoin Core may seem overwhelming at first, however, like all good things, it’s enormously rewarding. Below, we discuss an intro to Bitcoin Core Development:
1. Bitcoin Core is mainly in two languages, C++ & Python
Although there are other implementations of the protocol, you’re most likely going to have to learn at least some of both - C++ & Python - if you hope to contribute to Bitcoin Core - the reference implementation.
2. You will need a GitHub account
The Bitcoin Core source code is managed through Git. All changes to Core are merged on a PR-by-PR basis on GitHub. Familiarizing oneself with GitHub is essential. Here’s a beginner-level tutorial for Git & GitHub.
3. Clone the Bitcoin Core repository & setup the development environment
The README is a good place to start.
If something isn’t clear or doesn't work, google the errors. Bitcoin Stack Exchange is a good place to ask further questions.
4. After you’ve compiled the software, run some unit tests!
Bitcoin Core has a variety of unit and integration tests to check that the software you just compiled works properly. Run the unit tests using the guide here.
After all the unit tests have passed, run the integration tests.
If something doesn't pass, there is a chance that you may have missed some instruction.
5. Contributing to Core
A lot of work is around reviewing & testing the code that other people submit - this ensures the success of the project. It’s not just about contributing code yourself!
Review & testing can:
Prevent severe security flaws.
Help you understand the codebase.
Inculcate an adversarial mindset.
What goes on in a code review?
Is the code doing what it should be doing?
Is the code tested sufficiently?
Are all the comments around the code helpful and accurate?
Is the code clear and easy to modify later?
How to properly test a code?
Download the code from the pull request, compile again & run the tests.
If you think there should be a test, you can write “this needs a test” in the PR. Better yet, write the test yourself & let the PR author know!
A complete contribution workflow is described in CONTRIBUTING.md. Useful hints for developers can be found in doc/developer-notes.md.
6. Pull Requests (PRs)
A pull request (PR) can be anything from adding documentation to consensus-critical functionality.
How does a PR get merged?
Someone creates a change & submits the code via a PR.
One or more people review the code.
One or more people test the code.
When enough people have reviewed & tested the code, a maintainer will merge the code.
Good PR practices:
Make PRs that are easy to understand & painless to review.
Separate proposed changes into easy-to-review commits of < 100 lines.
Understand the reasoning behind reviewer comments and have a mature, tactful dialogue to get their ACKs.
Bitcoin Core development practices may seem restrictive & rigid at first, however there is a reason for every step that is followed. Remember, patience is a virtue! While contributing & interacting with other devs, be courteous, humble & tactful.
Bitcoin Core is purely meritocratic. Quality of code, reviews, documentation & testing are of prime importance!
Follow the guides below to go from zero to hero in your Bitcoin Core development journey:
A Gentle Introduction to Bitcoin Core Development by Jimmy Song (2017)
Contributing to Bitcoin Core, a personal account by John Newbery (2017)
Understanding the Technical Side of Bitcoin by Pierre Rochard (2018)
A hardCORE workout / transcript / slides by Jeremy Rubin (2018)
How to Review Pull Requests in Bitcoin Core by Jon Atack (2022)
Interview with Anmol Sharma
We spoke with Anmol Sharma, a 21-year old university student from India and a Summer of Bitcoin 2022 intern who contributed to Bcoin - a bitcoin implementation in Javascript, on his bitcoin development journey and how to crack Summer of Bitcoin 2023.
Listen to the full conversation on Spotify here
You can also watch a video of the conversation here
Read the full transcript:
ADI SHANKARA: Welcome to the first episode of The Summer of Bitcoin Experience. Let's start with a bit of your introduction. Can you tell us a little bit about yourself?
ANMOL SHARMA: Hi Adi. Thanks for inviting me. I'm Anmol Sharma and I’m a student at IIITDM, Jabalpur, India. I’m pursuing a bachelor's degree in Electronics and Communications Engineering, and I'm currently in my third year of B-Tech. I've been a part of Summer of Bitcoin 2022, and I’ve worked on adding a new coin selection algorithm to bcoin under the mentorship of Matthew Zipkin.
SHANKARA: Can you tell us how did you stumble down the Bitcoin rabbit hole and what was your first interaction? Maybe it was a video or a podcast or some blog posts that you came across and what was that orange pill moment for you?
SHARMA: So, before Summer of Bitcoin, I only thought of Bitcoin as just another cryptocurrency; but through Summer of Bitcoin, I learned about the change that Bitcoin is bringing to the current financial system. I think my orange pill moment was when I first read the book, The Bitcoin Standard, and through that, I got to learn about how Bitcoin is a store of value and the only true form of sound money. And I learned about how broken the fiat system really is and how Bitcoin can fix it.
SHANKARA: Interesting. So, let's maybe elaborate more on that; why do you feel bitcoin is important and worth paying attention to?
SHARMA: So, I feel that the world is going through an unprecedented financial crisis. There is a lot of turmoil all around the world, like even if you talk about the UK, Ukraine, Sri Lanka, China, like there's a lot of turmoil everywhere, and I believe that Bitcoin is the ground-breaking digital technology, which has the potential to radically change the way we conduct banking and commerce. So, I believe that Bitcoin fixes the broken fiat system, which we have been following for centuries, and by bringing transparency and decentralization that fiat money does not provide.
SHANKARA: Yeah, very true! Let's switch gears to Summer of Bitcoin. When and how did you hear about Summer of Bitcoin and what was your first impression?
SHARMA: So, the first time I heard about SOB was on LinkedIn. I saw a post on LinkedIn though I didn't pay much attention to that during that time. The very next day one of my seniors shared the application link in our WhatsApp group, so that's when I first visited the website and read about the program. So, my initial impressions were that I found it very similar to Google Summer of Code, except for the fact that you will only find bitcoin related projects in Summer of Bitcoin. So, it's not just open-source. It's about bitcoin open-source community. And another very distinguishing factor which I also like very much is that it also has a design track where designers can also participate and contribute to open-source design.
SHANKARA: What made you apply to the Summer of Bitcoin program?
SHARMA: I applied because I wanted to learn more about bitcoin and cryptography. I've always had a knack of learning new things. So, I thought why not give it a shot? And trust me when I say this, that applying to Summer of Bitcoin has been one of the best decisions of my life, learning about Bitcoin and getting to work on it has been one of the most fulfilling experiences of my life. And the scale of impact which I can have through my work in the Bitcoin community is enormous! For example, let's take a project which I completed during my internship. That project allows users to save up to 90% of on-chain transaction fees. So as an intern, I was able to have such a huge impact. And that's a big win for me!
SHANKARA: Let's talk about the beginning of the Summer of Bitcoin program. So, you came across the application process and you decided to apply - what was the application process like?
SHARMA: So, the first step was to fill an application form on the SOB official website and submit your resume. Shortly after that, you will receive an online programming test link. So, the test was conducted on InterviewBit and consisted of medium to hard level algorithmic questions. Once you’ve cleared the online test, your mentor will discuss more about the project deliverables on discord server. The last step is to make a proposal and submit it to your mentor for review. Once your proposal gets accepted, you’re in! And you can submit up to three proposals. And the organization which I chose to apply was bcoin. And I submitted a proposal to work on the Coin Selection project.
SHANKARA: Can you tell us why you chose bcoin?
SHARMA: I chose bcoin because I already had programming experience with NodeJS and JavaScript. And I also find the project really interesting. Like I love solving algorithmic puzzles, and the project was right up my alley.
SHANKARA: Cool. You mentioned earlier about your project idea - Coin Selection. Can you tell us a little bit more about that project idea? And why did you choose that project to apply to?
SHARMA: Yeah, I worked on implementing a new Coin Selection algorithm in bcoin. So, you can think of a Bitcoin wallet as the normal wallet which you use daily, if you want to…say if you wanted to pay someone 200 rupees, you can do it in many different ways. Maybe like you can pay one note of rupees 100 & 2 notes of rupees 50, or maybe you can pay one note of rupees 500 and receive 300 as change. So, the same process happens in any bitcoin wallet. But the distinction is that you have to pay a transaction fee each time you try to spend some money. So, coin selection is the process of optimally choosing those points to minimize the transaction fee. Before I started the project, the bcoin wallet had a very limited set of coin selection algorithms when constructing a transaction. The default algorithms were very memory inefficient, and took a long time to run if the wallet had a large number of UTXO. So, it's an important deal because coin selection directly impacts the fee a user has to pay in a transaction. After completing a project, I've made the coin selection process four times faster and reduced the fee user has to pay by 90%.
SHANKARA: Wow, that's a lot of savings in transaction fees. And it's very amazing how the algorithm that you implemented in the bcoin project is unique to itself and something that was done, you know, for the very first time in a Bitcoin implementation. I think Bitcoin Core has its own coin selection algorithms that may be different from yours. And I guess it remains to be seen how efficient each of these algorithms are, but the fact that you were able to implement something that would save so much in transaction fees is really commendable! So, you worked with a mentor, who been around for a very long time in the Bitcoin development space. Can you tell us a little bit about him and your experience working with him?
SHARMA: So, Matthew Zipkin was my mentor for the project, and he is the maintainer of bcoin and another project called handshake. It's always fun to talk and learn from him. He's always a wonderful teacher. He is also very patient and always explained to me why something is done the way it's done. We both share the same passion for making bitcoin better, it would be impossible to count all the ways he helped me. He would often invite other prominent bitcoiners from the space and give me an opportunity to talk to them. He once invited Murch to our weekly meetings, so I could talk to him more about the new coin selection algorithm which I developed. Overall, he's a great guy.
SHANKARA: Anmol, what are your plans now, after having completed Summer of Bitcoin and specifically, with the bcoin organization. What are you currently working on?
SHARMA: So, my plan is to stay in the Bitcoin Dev community. Fortunately, shortly after SOB ended, I was contacted by the CTO of Bold on LinkedIn. He was following my contributions to bcoin, as bcoin is the primary dependency for their project. So, if it wasn't for SOB, I wouldn't have landed up at Bold. Bold is a bitcoin-only company and we are building a credit card that is collateralized by bitcoin, which allows consumers to spend on a fiat line of credit against their bitcoin. It allows you to store your bitcoin as collateral and enable spending in fiat and it's using the current system against itself. We are planning to spread bitcoin adoption throughout the world. Next week is going to be a month since I joined Bold and my experience has been nothing but amazing.
SHANKARA: Sweet, amazing. What else are you excited about in the bitcoin space?
SHARMA: I'm excited about the taproot project and the opportunities it opens for the Lightning Network and the impact it will have on the Lightning Network. So, it offers lighter and more private MultiSig transactions and taproot better aligns the incentives and makes it cheaper to spend/stack sats at the cost of slightly more expensive outputs. We are in the process of merging the taproot PR to bcoin. So that's something I look forward to.
SHANKARA: Okay, that's great. I look forward to it in terms of what we can do with taproot in bcoin given that many projects use bcoin, for their bitcoin operations. Switching gears a bit - for someone who is getting started in bitcoin development - what do you think are the best resources for a beginner developer who wants to contribute to bitcoin open-source software?
SHARMA: First of all, I feel that you need to have some prior programming experience before you jump into the bitcoin technicals. The learning curve for bitcoin is a bit steep, so it's good if you have some prior experience for learning about bitcoin. There are many books like Mastering Bitcoin and Programming Bitcoin. Mastering Bitcoin by Andreas is one of the best books if you want to learn about the technical aspects of bitcoin. Other than that, I definitely recommend reading The Bitcoin Standard and Layered Money. They will help you understand why Bitcoin is important and the economics of Bitcoin. You can also find some useful blogs on Summer of Bitcoin’s website. If you want to learn about my project and Coin Selection in general, I've written a series of blog posts which are published there.
My advice for beginners is don't be afraid if you can't grasp something in one go. As I said earlier, bitcoin development is not easy, and it's natural to feel overwhelmed sometimes, but the main thing is that you shouldn't give up. If you can't understand something. Instead, try asking for help. There are so many dev communities in bitcoin you can't even think of. You can even message on the official bitcoin IRC channel and ask about basically anything. Bitcoin stack exchange is another very useful resource and you can find answers to some common questions there.
SHANKARA: Alright. So, for people who are especially university students, who want to take part in SOB next year, do you have any piece of advice or any tips for those people who want to crack Summer of Bitcoin?
SHARMA: Yeah, so my top three tips for cracking Summer of Bitcoin is that you gain some programming experience. Being proficient in one language is also enough. As I mentioned earlier, bitcoin development is not easy as compared to other areas of development. So you need to be proficient in at least one language at the bare minimum. Second of all, don't wait for applications to open. Start learning about bitcoin from now. If you aspire to be a SOB intern, starting early will always help you to stand out in your applications. And last but not the least, ask a lot of questions. The more you'll ask questions the more you learn and the bitcoin development community is so welcoming that you can even ask the stupidest questions from the most senior developers and they'll still respond to you.
SHANKARA: Anmol, this was pretty useful. Thank you very much for sharing about your Summer of Bitcoin experience.
SHARMA: Thanks Adi! Thanks for having me here.
JOBS IN BITCOIN
If you are a fresher straight out of college, here are a few exciting job postings we recommend:
Engineering:
Backend engineer | bookmark.org | Remote | Apply
Software engineer | Joltz | Remote | Apply
UX & Frontend Coder | plebeian.technology | Remote | Apply
Frontend Engineer | Geyser | Remote | Apply
React Native Developer | Synonym | Remote | Apply
Backend Developer | Nordblock | Remote | Apply
Frontend Engineer | Alby | Remote | Apply
Software Engineer, Backend | Strike | Remote | Apply
React Native Developer | Zion | Austin, TX, USA | Apply
Frontend Developer | Foreman | Remote | Apply
Full Stack Engineer | Lucent Labs | Remote | Apply
Frontend Engineer | Vulpem Ventures | Remote | Apply
Design:
UX Designer | Coinbits | Remote | Apply