Prof. Pramod Viswanath,,  217-244-8999

Teaching assistant

Xuechao Wang,


    Topic Lecture notes Summary video Course materials
  1 Introduction Notes Video Slides

Module 1: Bitcoin

2 Cryptographic primitives Notes Video Slides
3 Nakamoto consensus Notes Video Slides
4 P2P network Notes Video Slides
5 Bitcoin system Notes Video Slides
6 Bitcoin safety Notes Video Whiteboard
7 Bitcoin liveness Notes Video Whiteboard

Module 2: Scaling Bitcoin

8 Scaling throughput Notes Video Whiteboard
9 Scaling latency Notes Video Whiteboard
10 Sharding Notes Video Slides
11 Scaling externally Notes Video Slides
12 Proof of stake Notes Video Slides
13 Transaction order fairness Notes Video Slides

Module 3: Beyond Bitcoin

14 Streamlet and Hotstuff Notes Video Slides
15 Algorand Notes Video Slides
16 Finality gadget: bridge BFT and longest chain protocols Notes Video Slides
17 Bootstrapping blockchains Notes   Slides
18 Zcash architecture Notes Video Slides
19 Privacy bridge Notes Video  

Module 4: Design Case Studies

20 Blockchain computer of Ethereum     Slides
21 Blockchain computer of Hyperledger     Slides
22 Privacy-preserving smart contracts      
23 Discussion: automated market maker      
24 Discussion: flash loans      

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 four modules: in the first module (6 lectures) 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 module (6 lectures) 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 third module (6 lectures), we go beyond Bitcoin and cover alternate blockchain protocols that offer properties that are simply not present in Bitcoin. These include accountability, resistance to 51% mining attacks, transaction finality, and privacy. In the last module (7 lectures), we cover other topics about blockchain architectures and enconomics, we also do several design case studies on blockchain applications. 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. In the project at the second part of the course you will select one of the scaling solutions we will discuss and implement on top of your Bitcoin client and verify the resulting improvement.

Course Notes


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)


Tuesdays and Thursdays, 5:00pm-6:30pm, Online Course

Office Hours

Prof. Viswanath - Fridays 1-2pm, online

Xuechao Wang - Mondays 3-4pm, online


Warmups - 5%

Midterm Project - 40%

Final Project - 30%

Lecture Summary - 15%

Lecture Notes Reading - 10%

Lecture Summary Tasks

For each lecture, one or two students are required to record a 5-7 minutes video as a summary of the lecture, based on the lecture notes, slides, and supplementary materials we provided. The schedule is available here: [ Schedule ]. This task is due in two weeks since the lecture notes are released. You should write a summary text and make a draft video in the first week. You revise and improve according to our feedback in the next week. A final version should be submitted by the end of the second week. Both draft and final version are submitted through Illinois Box, upload your videos and share them with the instructor (pramodv@) and the TA (xuechao2@) as editors. Please rename your video as LectureX_draft_netid.mp4 or LectureX_final_netid.mp4 before uploading.


Warmup 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: [ Warmup 1 ]. Due date: 5:00PM, Feb 4, 2021.

Warmup 2 - In this assignment, you will get to learn to basic cryptographic primitives (hash functions and signatures) and build fundamental data structures that form the core of blockchains: block chains and Merkle trees. The assignment will be accessed and completed on Gitlab, available here: [ Warmup 2 ]. Due date: 5:00PM, Feb 11, 2021.

Midterm Project

We are going to build a simplified Bitcoin client with full node functionality. Students will create a private test net amongst their team members(groups of 2) and have fun changing various parameters of layer 1. The project will be a continuation of the code used in Warmup 2. The project will be split into 6 weeks with checkpoints every week as listed below.

Week 1: Block and Blockchain structure - Create block and blockchain struct and add some functions related to it. More detailed instructions can be found at [ Midterm Project Week 1 ]. Due date: 5:00PM, Feb 18, 2021.

Week 2: Mining - Implement a mining module of the bitcoin client. The mining module(miner) will produce blocks by solving the proof-of-work puzzle. More detailed instructions can be found at [ Midterm Project Week 2 ]. Due date: 5:00PM, Feb 25, 2021.

Week 3: Network - Implement the network module of Bitcoin client. The network module is in charge of communicating with other nodes/clients. It forms the peer-to-peer (p2p) network and uses gossip protocol to exchange data, including blocks and transactions. More detailed instructions can be found at [ Midterm Project Week 3 ]. Due date: 11:59PM, March 7, 2021.

Week 4: Putting together a data blockchain - Combine last 3 week's work to make a functioning data blockchain. Most of this week's work will be combining mining, network, and blockchain modules. You will need to add PoW validation and a block buffer to handle orphan blocks. More detailed instructions can be found at [ Midterm Project Week 4 ]. Due date: 5:00PM, March 11, 2021.

Week 5: Transactions - Include transactions in the codebase. Integrate the transaction structure inside the block content, add network functionality to transaction propagation and adding a transaction mempool to be used by the miner to include transaction content in the block being mined. More detailed instructions can be found at [ Midterm Project Week 5 ]. Due date: 5:00PM, March 18, 2021.( Suggested due date, no submission required.)

Week 6: State transition and validation - This is the last part of midterm project, and you are going to finish the Bitcoin client. You need to maintain a state for the ledger that the blockchain creates and add all the necessary checks related to it. More detailed instructions can be found at [ Midterm Project Week 6 ]. Due date: 5:00PM, March 25, 2021.

Video Lectures

The recorded lecture videos can be found here.