Course information (Tentative; small changes are possible) Instructor: Vlad Kolesnikov Office: Online/Coda IISP 9th Fl Email: canvas Office hours: TBD Teaching Assistants: TB Description Undergraduate Introduction to Blockchain and cryptocurrencies, building on formal crypto and distributed systems. Cover fundamental and practical aspects. Includes programming projects report on research presentations. Pre-Requisites (for undergrad; graduate prereq similar with expectation of more mathematical maturity needed for research project) 3510 (UG algorithms) or similar AND ONE UG 2nd year programming course or higher as follows: CS 2110. Computer Organization and Programming OR CS 2340. Objects and Design CS undergraduate class prerequisites should have a minimum C grade requirement. In words, to take this class, you will require mathematical maturity. Ability to read, understand and write definitions and proofs. No prior background in cryptography is required. I expect that you did well in your undergraduate discrete math class and took basic algorithms and computability/complexity theory classes. For example, I expect students to understand running time of an algorithm, basic probability theory, be familiar with computational models, such as Turing machines, etc. Programming: Basic programming expertise is required. Ability to develop interactive networked programs, independently extensively consulting online resources to learn Ethereum APIs. Course Goals and Learning Objectives There are several objectives for this course: 1. Review and learn in context basic fundamentals from cryptography and distributed systems, such as: probability, security experiments, basic cryptographic primitives and definitions, distributed consensus and broadcast. After completing this course component, students will be comfortable with these notions. 2. Discover and learn basic approaches to blockchains, focusing on Proof-of-Work as the underlying block nomination mechanism. After completing this course component, students will have understanding of blockchain capabilities and standard blockchain design ideas and building blocks. 3. Learn lower-level specifics of Bitcoin and Ethereum, such as transactions details, scripting language details, forks, as well as underlying data structures, such as Merkle Trees. Hands-on projects solving Ethereum puzzles, finding and exploiting buggy Ethereum contracts. After completing this course component, students will have concrete understanding of the blockchains. 4. Learn (very) basic techniques and principles for secure computation (MPC) and Zero-Knowledge proofs. Students will be aware of exciting crypto capabilities that are becoming more prominently used in modern blockchains. 5. Research component. Students will report on research presentations (selection curated by the instructor) related to blockchain; they will learn the material presented, and summarize it in reports. Course Educational Outcomes At the conclusion of this class, students will have obtained and broadened their understanding of blockchain algorithms and solutions. They will have learned the fundamentals required to formally discuss security notions. They will practice their learned knowledge by writing code to interact with blockchain, research (report) on blockchain literature, leading and participating in class discussions. Course Materials Course Text Bitcoin and Cryptocurrency Technologies Arvind Narayanan, Joseph Bonneau, Edward Felten, Andrew Miller, Steven Goldfeder Available free of charge on https://bitcoinbook.cs.princeton.edu/ Additional Materials/Resources Course materials include slides and will be provided. Course Requirements, Assignments & Grading Assignment Distribution and Grading Scale Assignments Weight Midterm 30% Grad research presentations OR Undergrad Report on research presentations 15% Programming Projects 20% Quizzes 25% HW Assignments / Participation resp. 7% and 3%, total 10% Total 100% Grading Scale The final grade will be assigned as a letter grade according to the following scale: A 90-100% B 80-89% C 70-79% D 60-69% F 0-59% Textbooks. We will mainly use the Princeton bitcoin book http://bitcoinbook.cs.princeton.edu/ Free PDF of the book is available https://d28rh4a8wq0iu5.cloudfront.net/bitcointech/readings/princeton_bitcoin_book.pdf, and I will use the PDF. The book is high-level, but readily formalizable (by discussing detail beyond the presentation of the book). We will formalize part of the discussion of the book. MPC and Zero-Knowledge material will be in part drawn from the book I wrote with Dave Evans and Mike Rosulek. Free version is available: http://securecomputation.org/ Lecture slides will be posted on canvas. Additional reading: research literature on bitcoin/blockchain and cryptography. Course goal: introduce foundations of cryptography and distributed systems to enable understanding basic principles and advanced ideas in the blockchain space. Content: This course is an introduction to blockchain and underlying technology, mostly crypto. It is intended for senior CS students, especially those interested in cryptography or security. Course will involve some coding, reading research literature and writing formal proofs of security. I plan to focus on the following topics (list not necessarily complete and does not imply any specific order or weight): Crypto background: symmetric (hash, encryption) and asymmetric (signatures) primitives, including formal definitions and discussion. Related distributed systems background. Basic architecture of blockchain and bitcoin. Anonymity Advanced crypto primitives (secure computation and zero-knowledge). Altcoins, including Ethereum and others. Advance blockchain issues (proof of work, proof of space, etc) Economics and social issues of bitcoin. Blockchain as a platform and interaction with on other fields. Crypto-technical discussions will be formal or readily formalizable. We will work with definitions, foundations, and mathematical proofs of security.