Cryptocurrencies

Next running

Not currently scheduled for a next session. Please email us to express your interest.

In October of 2008, a pseudonymous individual by the name of Satoshi Nakamoto published a white paper to a cryptography mailing list describing a protocol for a secure decentralized digital currency. Since the launch of the Bitcoin network in 2009, the market cap of cryptocurrencies have risen into the hundreds of billions of dollars, and the Bitcoin protocol has spawned a wave of innovation and experimentation in the domains of distributed systems, cryptography, and economics.

Some claim that the ideas behind blockchains will be integral to the future of money, governments, and the Internet. Whether or not those claims turn out to be true, it’s clear that cryptocurrencies an important area of technological innovation. In this course we’ll discuss them, examine in detail how they work, and build one for ourselves.

This course is designed to be an introduction to the theory and mechanics behind cryptocurrencies. It is intended for professional software engineers, and assumes a basic knowledge of programming and computer science. Beyond merely blockchains, the study of cryptocurrencies is inherently multidisciplinary, touching concepts from computer science, security, economics, and history. Though our primary focus will be on computer science, we’ll also delve into each of those disciplines where appropriate.

Projects and exercises

Because this course is designed for professional software engineers, we will be exploring the material through building software. We will be building out a Bitcoin-esque cryptocurrency and all of its requisite components (a blockchain, cryptography, P2P networking, and proof-of-work). We'll also build some Ethereum smart contracts using Solidity and analyze them for potential attacks.

Assumed knowledge

This course assumes confident general programming abilities. Some familiarity with data structures and networking is required. Some basic knowledge of cryptography and distributed systems is helpful but not assumed.