Chapter 14. Advanced Topics and Next Steps

If you’ve made it this far, congratulations! You’ve learned a lot about Bitcoin’s inner workings, and hopefully you are inspired to learn a lot more. This book has only scratched the surface. In this chapter, we’ll go through some other topics you might want to explore, how to bootstrap your career as a Bitcoin developer, and ways to contribute to the community.

Suggested Topics to Study Next

Wallets

Creating a wallet is a challenging task because securing private keys is very difficult. That said, there are a bunch of standards for creating wallets that can help.

Hierarchical Deterministic Wallets

For privacy purposes, reusing addresses is very bad (see Chapter 7). That means we need to create lots of addresses. Unfortunately, storing a different secret for each address generated can become a security and backup problem. How do you back them all up in a secure way? Do you generate a ton of secrets and then back them up? What if you run out of secrets? How do you back them up again? What system can you use to ensure that the backups are current?

To combat this problem, Armory, an early Bitcoin wallet, first implemented deterministic wallets. The idea of a deterministic wallet is that you can generate one seed and create lots and lots of different addresses with that one seed. The Armory-style deterministic wallets were great, except people wanted some grouping of addresses—so, the hierarchical deterministic (HD) wallet standard, BIP0032, was born. BIP0032 wallets have multiple layers and keys, each with a unique derivation path. The specifications and test vectors are defined in the BIP0032 standard, so implementing your own HD wallet on testnet is a great way to learn.

Additionally, BIP0044 defines what each layer of the BIP0032 hierarchy can mean and the best practices for using a single HD seed to store coins from a lot of different cryptocurrencies. Implementing BIP0044 can also be a way to understand the HD wallet infrastructure a lot better. While many wallets (Trezor, Coinomi, etc.) implement both BIP0032 and BIP0044, some wallets ignore BIP0044 altogether and use their own BIP0032 hierarchy (Electrum and Edge being two examples).

Contributing

A large part of the Bitcoin ethic is contributing back to the community. The main way you can do that is through open source projects. There are almost too many to list, but here’s a sample:

Bitcoin Core

The reference client

Libbitcoin

An alternate implementation of Bitcoin in C++

btcd

A Golang-based implementation of Bitcoin

Bcoin

A JavaScript-based implementation of Bitcoin, maintained by purse.io

pycoin

A Python library for Bitcoin

BitcoinJ

A Java library for Bitcoin

BitcoinJS

A JavaScript library for Bitcoin

BTCPay

A Bitcoin payment processing engine written in C#

Contributing can be very beneficial for a lot of reasons, including future employment opportunities, learning, getting good business ideas, and so on.

Suggested Next Projects

If at this point you’re still wondering what projects would be beneficial for you, what follows are some suggestions.