Blockchain promises to disrupt industries once it will be efficient at large scale. In this course, you will learn how to make blockchain scale. You will learn about the foundational problem of distributed computing, consensus, that is key to create blocks securely. By illustrating limitations of mainstream blockchains, this course will indicate how to improve the technology in terms of security and efficiency.
In particular, this course will help you:
* understand security vulnerabilities of mainstream blockchains;
* design consensus algorithms that tolerate attacks, and;
* design scalable blockchain systems.
Consensus in blockchain
This week, we will start our exploration of the blockchain and its relation to distributed computing. In particular, we will learn the basics on blockchain abstraction and the importance of consensus between machines in order to mitigate the risks of having an attacker spend the same asset twice - an undesirable situation called 'double-spending'.
This week we will learn how classic blockchains try to solve consensus. We will look at the failures and delays blockchain systems must consider, and how these events may prevent machines from reaching consensus.
This week, we will investigate how to solve the consensus problem. To do this, we will first investigate how to solve consensus when failures cannot occur in the network. Later on, we will learn how to solve consensus when processes may fail, first through crash failures and then when processes can behave arbitrarily.
Making blockchains secure
This week, we will investigate how delays in the network can impact the security of the blockchain. We will illustrate this using network attacks that allow hackers to steal digital assets in the past and that every blockchain designer should be aware of.
Making blockchains scale
This week, we will explore how to design a scalable and secure blockchain algorithm. What makes a blockchain algorithm scalable and secure? To be secure, we need a consensus algorithm that works over the Internet and is not affected by unexpected communication delays. To be scalable, we need to get rid of the bottlenecks.