CS 251P: Bitcoin Lab

For the Winter 2016 edition of the class, please see here.

Autumn 2015

The course is a 1-unit lab component of cs251. The class meets for one hour on Monday at 4:30pm in Gates 505.
Lab projects will be done in class and no other work will be assigned. The course is C/NC.


Bitcoin sits at the intersection of cryptography, finance, distributed computing, game theory, semiconductors, and more fields besides. Created by a pseudonymous engineer, Bitcoin solved an unsolved problem in computer science - the Byzantine Generals problem - and thereby enabled decentralization of a large class of problems previously thought to require centralized architectures. The technology has attracted close to a billion dollars in venture capital, has given birth to hundreds of startups and millions of lines of newspaper copy, and has been a topic of discussion for virtually every government in the world. It is thus both a theoretical breakthrough in computer science and an inherently applied subject.

While CS251 will give you a strong grounding in the technology underlying Bitcoin, in this complementary course (CS251P) we will tackle the applied side of Bitcoin with a focus on practical projects. Specifically, we will go through a series of Bitcoin-based labs, each of which is focused on a single practical problem that you'd encounter while trying to use Bitcoin. Over the course of going through these labs, you'll learn how to use Bitcoin mining chips in conjunction with Bitcoin-based software to build micropayments-based applications that work with any internet-connected device. By the end of this class, you will have gained the practical knowledge required to build fairly sophisticated hardware and software applications that require intimate knowledge of the Bitcoin protocol.


Date Lab Questions
Sep. 21 No Lab: Brief Introduction in CS251 Application form
Sep. 28 Lab 0: Overview Lecture (Syllabus and State of Bitcoin - 2015) -
Oct. 5 Lab 1: Hashes, Signatures, Hashcash, and Bitcoind. Lab 1 - Questions
Oct. 12 Lab 2: Merkle Trees, Mining, and the Genesis Block. Lab 2 - Questions
Oct. 19 Lab 3: ASIC Mining, Bitcoin Consensus, and Hard Forks. Lab 3 - Questions
Oct. 26 Lab 4: Parsing Bitcoin Data Structures. Lab 4 - Questions
Nov. 2 Lab 5: Script, Opcodes, and Blockchain Data. Lab 5 - Questions
Nov. 9 Lab 6: Create a Bitcoin-payable server to sell digital goods. Lab 6 - Optional Demo Signup
Nov. 16 Lab 7: Create a digital supply chain. Lab 7 - Feedback
Nov. 23 Thanksgiving
Nov. 30 Lab 8: The 21 Bitcoin Library Lab 8 - Feedback
Dec. 7 Finals week (CS251 final; no final for CS251P)