Fall 2022
Princeton University
This course by Princeton University provides a full-stack design overview of blockchains, focusing on Bitcoin's design, scaling strategies, and additional considerations such as privacy and finality. It features a practical approach, with students implementing a Bitcoin client in Rust by the end of the course.
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 covers the foundations of blockchains, and is divided into 3 parts: in the first part 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 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 final part, we study aspects of blockchain design that were simply not considered in Bitcoin (e.g., privacy, finality). 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 for the foundation component of the course. By the end of the course, you will implement a Bitcoin client in Rust.
The basic technical prerequisites are a background in probability and algorithms. Decent amount of software programming background is essential.
No data.
Supplemental reading:
Lecture slides and notes available at Course Material
Summary videos and full videos available at Course Material
Assignments available at Bitcoin Client Project
Final Exam available at Final Exam
No other materials available