tto / docs / bitcoin / byzantine generals problem

Generals of the byzantine army want to attack a city and can only use messengers to communicate in an adversary environment. Messengers can be lost, corrupted. Some generals could be traitors. A way is needed to allow loyal generals to formulate and execute a plan of action independent of the actions of traitors.

This was solved by various algorithms such as PBFT, but they had issues: parties were required to be known previously, this limits scalability and requires trust. Sanctions for bad actors was not possible in-protocol.

Where PBFT gives one vote to each known actor, [nakamoto-consensus] gives one vote to each unit of computation: originally one cpu one vote, effectively it’s one asic one vote.