# MCIT 582 - Blockchains

I co-teach the blockchain course in Penn’s MCIT Online program with Mohammad Amiri. The course provides an in-depth introduction to the cryptography and consensus mechanisms that form the foundation of essentially all existing blockchain platforms. In the weekly homework assignments, we’ll use python to interact with the Bitcoin, Ethereum and Algorand blockchains. The course assumes no prior knowledge of cryptography or distributed systems, but a basic familiarity with Python will is helpful.

## Syllabus

- Introduction
- Course overview
- Motivations (fun blockchain stories)
- Introduction to Git / HW assignments
- Basic mathematics (discrete math)
- Modular arithmetic
- Square-and-multiply
- Probability

- Cryptography I
- Cryptographic hash functions
- Hash chains
- The birthday paradox
- The SHA family of hashes
- Merkle Trees
- Applications of hash functions

- Cryptography II
- A brief history of encryption
- El-Gamal
- RSA
- Identity
- Cryptography on the blockchain
- Elliptic Curves
- The ECDSA algorithm
- Post-Quantum Cryptography

- Blockchains
- Why Blockchain?
- What is a blockchain?
- Blockchain features
- Permissionless vs Permissioned Blockchains
- A Blockchain Application

- Consensus
- State Machine Replication
- Impossibility results
- Consensus aspects
- Byzantine Agreement

- Consensus Protocols
- Crash Fault-tolerant protocol: Paxos
- Paxos Protocol
- Multi-paxos
- Paxos in Real Systems
- Byzantine Fault-tolerant protocol: PBFT
- PBFT Model
- PBFT Protocol

- Bitcoin and Ethereum
- Digital Cash
- The UTXO Model
- Bitcoin
- Ethereum

- Proof of Work
- Bitcoin PoW
- PoW challenges
- Proof Stake
- Stability analysis

- Proof of Stake
- Verifiable Random Functions
- Byzantine Agreement made Trivial
- The Algorand protocol
- Proof of Stake
- Ethereum’s transition to PoS
- Proof of Stake systems in the wild

- Exchanges
- Exchanges
- Decentralized exchanges in Ethereum
- Matching Algorithms
- A Simple Matching Algorithm
- Architecture of a cryptocurrency exchange

- Zero-knowledge proofs
- Intro to ZKPs
- Zero-Knowledge 3-Coloring
- Zero-Knowledge Sudoku
- Limitations of ZKPs
- Applications of ZKPs

- Privacy and anonymity
- Pseudonymity
- ZCash
- De-anonymizing ZCash
- Monero
- De-anonymizing Monero

- Smart contracts
- Smart contracts definition
- Smart contracts properties
- Contracts are deterministic (gambling / games are hard)
- Contracts are public
- Contracts are “stupid” (hacks, mistakes)
- Implementation of smart contracts
- Solidity
- Challenges

- Permissioned blockchains
- Permissioned blockchains
- Blockchain Performance: Tendermint
- Blockchain Performance: Hyperledger Fabric
- Blockchain Scalability
- Blockchain Confidentiality
- Blockchain Verifiability