SatsAtlas

Technical · 2019 · free/open

Programming Bitcoin

by Jimmy Song

Build a Bitcoin library from scratch in Python — learn by implementing.

The honest summary

Programming Bitcoin teaches the protocol by making you build it: over the course of the book you implement a Bitcoin library from scratch in Python — finite fields and elliptic curve math first, then keys and signatures, serialization, transactions, Script, blocks, proof-of-work validation, and the networking to talk to real nodes. Nothing is imported that you haven’t written.

Song’s approach is exercise-driven (the repo is open source with worked solutions), and its distinctive value is the first third: nowhere else is the cryptography under Bitcoin built up this patiently for a working programmer.

It suits developers who learn by doing and want to OWN their understanding of ECDSA and transaction internals. It is not a reference (that is Mastering Bitcoin) and not for non-programmers; comfort with Python and some math stamina are the entry fee.

Quick answers

What is Programming Bitcoin about?
Build a Bitcoin library from scratch in Python — learn by implementing. Programming Bitcoin teaches the protocol by making you build it: over the course of the book you implement a Bitcoin library from scratch in Python — finite fields and elliptic curve math first, then keys and signatures, serialization, transactions, Script, blocks, proof-of-work validation, and the networking to talk to real nodes. Nothing is imported that you haven’t written.
Who should read Programming Bitcoin?
It suits developers who learn by doing and want to OWN their understanding of ECDSA and transaction internals. It is not a reference (that is Mastering Bitcoin) and not for non-programmers; comfort with Python and some math stamina are the entry fee.
Is Programming Bitcoin free to read?
Yes — Programming Bitcoin is published under an open license and can be read free via the official site.

Read next

The full bookshelf → · Prefer listening? Bitcoin Audible → · Terms you'll meet, defined →