The Agreement Problem
How do you get computers that do not trust each other to agree? This is the fundamental problem of distributed consensus, formalized as the Byzantine Generals Problem by Lamport, Shostak, and Pease in 1982. Some generals (nodes) may be traitors (Byzantine faults) sending contradictory messages. The loyal generals must still agree on a common plan of action — attack or retreat — despite the traitors' interference.
Classical BFT
The original proof showed that 3f+1 nodes are necessary and sufficient to tolerate f Byzantine faults. Practical BFT (pBFT), proposed by Castro and Liskov in 1999, made this feasible for real systems: nodes exchange messages in structured rounds (pre-prepare, prepare, commit), and each honest node waits for 2f+1 matching messages before accepting a value. This simulator visualizes these message exchanges as animated arcs between nodes.
Message Complexity
Classical BFT protocols require O(N squared) messages per round — every node must communicate with every other node. This limits scalability to tens or hundreds of nodes. Modern protocols like HotStuff reduce this to O(N) messages using a leader-based approach with threshold signatures, enabling BFT consensus at much larger scale. The trade-off is increased reliance on the leader, mitigated by view-change protocols.
Nakamoto vs Classical
Bitcoin took a radically different approach: instead of identifying and excluding faulty nodes through message exchange, Nakamoto consensus uses proof-of-work to make block creation costly and follows the longest chain. This achieves consensus among millions of anonymous nodes — something classical BFT cannot do — but provides only probabilistic finality. A transaction is considered final after several confirmations, each making reversal exponentially harder.