CS 251(p): Bitcoin and Crypto Currencies


Autumn 2015


The potential applications for Bitcoin-like technologies is enormous. The course will cover the technical aspects of crypto-currencies, blockchain technologies, and distributed consensus. Students will learn how these systems work and how to engineer secure software that interacts with the Bitcoin network and other crypto currencies. This course is intended for advanced undergraduates and graduate students.


The course assumes a basic familiarity with computer programming. CS110 (Principles of Computer Systems) or equivalent is strongly recommended. For two programming projects it will be possible to use the language of your choice (though we will provide additional support for Java implementations). One assignment (#2) will require programming in Java. One assignment (#4) will require programming in Serpent (Ethereum's smart contract language which is very similar to Python).

CS255 (Introduction to Cryptography) is helpful but not necessary; we will introduce concepts from cryptography as needed during class but students with no background in cryptography may wish to do extra reading for familiarity.

Textbook and Readings

We will list a number of different reading sources on the course syllabus page. These readings serve to expand on what we'll talk about in the lectures and present the material in a different way. They are not a replacement for the lectures. They are also not necessary to be read before coming to lecture. The lectures will be self-contained so the readings can be read afterwards to help reinforce the concepts presented in the lectures. They can equivalently be read before lecture to help the lectures make sense, depending on your learning style.

We will be using the draft textbook Bitcoin and Cryptocurrency Technologies by Narayanan, Bonneau, Felten, Miller and Goldfeder (referred to as NBFMG in the syllabus). The authors have kindly agreed to allow us to use the draft textbook chapters for free (available online). Please note that this textbook remains a draft and is certain to contain errors. Textbook errors should be reported the errata address for the book (not to the course staff). If you're not sure about a potential error, the course Piazza page would be an appropriate place to discuss before reporting.

Course readings will also include recent research papers and other online sources listed in the syllabus page. In particular, we will work through the research survey paper Research Perspectives and Challenges for Bitcoin and Cryptocurrencies by Bonneau, Miller, Clark, Narayanan, Kroll and Felten which includes references to most of the research literature on Bitcoin. We'll recommend a few of these other papers in particular in the syllabus. Jeremy Clark also maintains an extensive online bibliography of Bitcoin research papers which is a great resource if you want more detailed information about a specific topic.

Bitcoin does not have any official technical specification, but the Bitcoin Developer Reference is the closest thing available. It is a good reference for low-level technical details.

For a few topics for which there are no other good options, we may assign readings from the (unofficial) Bitcoin Wiki or the Bitcoin Talk forum. While there is a wealth of knowledge contained in these sources, please be careful when reading them, as a substantial amount of it is technically inaccurate or out of date. In particular, the original white paper Bitcoin: A Peer-to-Peer Electronic Cash System by Satoshi Nakamoto is now inconsistent in several respects with the actually deployed Bitcoin network (though we'll still be assigning it).


  • There will occasionally be a section on Friday 3:30-4:20pm in Gates B03.
  • Attendance at the sections is optional, but highly recommended.

Homework Assignments

  • There will be three written homework assignments and four programming projects.
  • You may collaborate when solving the written assignments, however when writing up the solutions you must do so on your own. 
  • All programming projects can be done in pairs.
  • You must submit all homeworks and projects electronically. Submission instructions will be provided.
  • Extensions:  Each student has a total of 72 extension hours throughout the quarter. This automatic extension can be spent in units of 24 hours on any of the assignments and projects. Please mark the submission time for any late assignment.
  • Homework and projects will be due at 11:59pm on the specified deadline.


There will be a final exam in the regularly scheduled time slot during final exam week. We will also provide an alternate final for those who cannot make the scheduled time. No midterm exam.


Final placement in the class will be determined by the following formula:

0.25 H + 0.5 P + 0.25 F

  • H is your average score on the three written homework assignments.
  • P is the weighted average grade on the four programming projects.
  • F is your final exam score.