Consensus in a Faulty System
Let's Agree To Agree
Consensus in a Faulty System

In the design and implementation of distributed systems, one of the main challenges is the need for consensus. Enabling processes to agree on some value, whether that may be an ID number, shared concept of time, or whether to accept/reject changes to a shared state, becomes all the more challenging due to the likelihood of faults in the system.

This project explores what models of communication processes can follow to reach consensus, and what algorithms are available to implement such a protocol. Our implementations of a leaderless Byzantine Paxos, leader-based RAFT, and HotStuff, a leader-based Byzantine fault tolerant algorithm, serve to demonstrate the ability of these algorithms to reach consensus in the presence of Byzantine faults and network failure.