BOSS (Bitcoin Open Source Software 2025) recap
With this post, I would like to retro from my last few weeks in the BOSS program.
In case you didn’t know, BOSS is a new program from ChainCode. At the time of your reading, they may open the new cohort, so check it out here.
For whom is this program?
BOSS is a successor of previous ChainCode programs. It is designed for software developers who want to learn Bitcoin and start contributing to Bitcoin open source.
How to get accepted?
When a new cohort was announced, I applied as soon as I knew it. I received the coding challenge in my email and finished it successfully. Later, I got the acceptance email. The process is clear and straightforward.
To be fully transparent, this was not the first time I tried to get on board. The qualifying coding challenge can be challenging indeed, as it involves working with the C++ codebase. At the same time, this is not rocket science so most software developers can do it if dedicate some time.
First week 🔥
Finally, I received the first task. It was a set of bitcoin RPC challenges that gave me a great understanding of what I can do with the bitcoin-cli
. I already have read a decent half of the “Mastering Bitcoin” and installed Bitcoin Core, it bootstrapped my start.
After this task, I became much more confident in my knowledge of how I can interact with the blockchain and what data I can query.
Second week 😳
The next task I received turned out to be much more complex as it involved precise knowledge of key derivation and transaction construction.
The first part was a bit easier for me as I have worked with the key derivation before so I knew the theoretical part on the enough level of details.
The second part made me crazy for a few days as my screen time was at least 12 hours per day. My longest debug session was 8 hours (fortunately, not in a row but split into two chunks). After those 8 hours, I finally understood that SCRIPT_SIG + SEQUENCE
should not be appended to the input we’re using to calculate sighash (commitment hash). As soon as I fixed this testmempoolaccept
RPC returned me so desired "allowed": true
field.
However, another transaction I was working on gave me some pain as well. That time I missed prepending multisig_script
with its length for the sighash.
This week I learnt a lot about Bitcoin internals and how to debug transactions. I found btcdeb quite an interesting tool. While it didn’t help me directly, it gave me a visual representation of how the script unlocks previous tx. Neat.
Third week 🚀
Fortunately, transactions were the hardest part for me. The next task involves only a little bit of knowledge of Bitcoin Core or similar software and is similar to olympiad programming. If you’ve done similar or if you do leetcode regularly, this is it - a chance to apply all these crazy data structures in practice.
What’s next?
Great question! While I was waiting for the next steps, I started The Bitcoiner's Intro to Rust program. I am more familiar with Go so Rust can become a great asset to myself.
I’ll update this post later to let you know how it all wrapped up.