Principles of Blockchains

Home --- Office hours --- Homeworks --- Midterm Project --- Grades --- Slides --- Piazza

Course description: Blockchains

Lectures: TR, 12.30am-1.50am, 2017 Electrical & Computer Eng Bldg.

Instructor: Prof. Pramod Viswanath, pramodv@, 118 Coordinated Science Laboratory (CSL), 244-8999.

Teaching Assistants: Ranvir Rana, rbrana2@ and Gerui Wang, geruiw2@

Course notes:

Prerequisite: The basic technical prerequisites are a background in probability and algorithms. Decent amount of software programming background is essential. At Illinois, the prerequisites are met by: Probability (ECE 313), a strong programming course (eg: ECE 390), algorithms (CS 473) and networking (ECE/CS 438)

Course Outline

Blockchains are decentralized digital trust engines and are a potential replacement to "digital platforms" that we encounter in today's world. Digital platform companies occupy 7 of the largest companies in the world based on market capitalization (eg: Apple, Google, Microsoft, Amazon, Alibaba, Tencent). Blockchains came into prominence through Bitcoin, a cryptocurrency, introduced in 2009. In the decade since its inception, blockchain designs have evolved significantly, although the corresponding evolution of applications (beyond cryptocurrencies) have not caught up yet. In this course, we study a full-stack design of blockchains: we view the blockchains as a whole integrated system involving networking, incentives, consensus, application layer support. The course is structured into two parts: in the first part (5 weeks) we study the Bitcoin design in detail. Although very secure and remarkably incentive compatible in the real world, Bitcoin has very poor performance in many ways: throughput, latency, energy, compute, storage and communication. In the second part (8 weeks) we study the various efforts to scale the performance of Bitcoin in all the different dimensions, while maintaining the incentive compatibility and security of Bitcoin. In the spirit of Nakamoto (who implemented and tested the Bitcoin client before writing the white paper), this course will be implementation-heavy. We will use the Rust programming language for our assignments and projects. By the middle of the course, you will implement a bitcoin client in Rust and test it out internally. In the final project you will implement features for scaling the Bitcoin client developed earlier. The homework assignments will help you in these implementation efforts by leading you along. Example: the first assignment is on getting you used to Rust and the second assignment lets you build and use basic crypto primitives (hash functions, Merkle trees, signatures) in Rust.

Office hours

Office hours (starting January 24, through May 4):


Slides and additional resources per lecture.

Lecture 1. In this introductory lecture, we talk about Blockchains are, how they are a potentially disruptive force in the digital platform economy of today. We also cover some history of Bitcoin (the first blockchain) and set up the outline for a detailed study of Bitcoin in the next 9 lectures. [ Slides ].
Supplementary reading: Module 1 on "History: money, the cypherpunks, and Satoshi Nakamoto" by Haseeb Qureshi.


Assignment 1. In this introductory assignment, you will get to learn the basics of Rust programming language and useful libraries. The assignment will be accessed and completed on Gitlab, available here: [ Assignment 1 ]. Due date: 12:30PM, Jan 28, 2020.