The Byzantine Generals Problem is a term etched from the computer science description of a situation where involved parties must agree on a single strategy in order to avoid complete failure, but where some of the involved parties are corrupt and disseminating false information or are otherwise unreliable.
Byzantine Army to set the mood.
The Byzantine Generals Problem makes for an excellent fundamental example of how Bitcoin’s Proof-of-Work consensus algorithm functions, and understanding it generally elevates your comprehension of other consensus algorithms.
Byzantine Generals Problem for Dummies
Welcome to the Byzantine Army, kid, strap your boots on, shine your helmet, and pick up your impossibly heavy shield – we’re going conquerin’.
Here’s your yearly quota of Byzantine history memes.
You’ve come at just the right time – we’ve got this city surrounded but have an unfortunately complicated logistics issue here. We have two armies, one on each side of the enemy city, and we need to attack at the same exact time. The city is strong enough to defend itself against one of our armies, but not strong enough to defend against two at the same time. If we don’t attack at the same time, we lose. And losing sucks.
So, the generals of each army need to agree on the exact moment when to attack. They communicate by sending a messenger back and forth through the enemy city. There’s no other way to communicate – cell phone service wasn’t the best around 600 AD.
For example, General A will send the message “Hey General B, we’re going to attack on Thursday. Can we count on you to attack with us?” The messenger then runs through the city and delivers the message to General B, who in turn responds, “We can’t do Thursday, group pilates. How about Friday? If we attack on Friday, will you attack with us?” And then the messenger runs through the city to deliver the message to General A, and so forth.
However, here’s the kicker: the messenger could potentially get caught in the city and replaced by a #fakenews messenger, who will intentionally try to deceive the other general to attack the city at the wrong time, dooming our army to a loss.
There is no way to check if the message is authentic, so how do we, as the finest military strategists in the land, create a “trustless” system that ensures victory in attacking the city?
And that’s the Byzantine Generals Problem.
Byzantine Generals Problem, Cryptocurrency, and Bitcoin
The above dilemma isn’t necessarily limited to just two generals. In a distributed network such as that of Bitcoin, all participants and nodes are essentially of equal hierarchy. So, now instead of needing to reach verification and agreement between two parties, we need all participants to approve, while neutralizing corrupt or misleading players.
The agreement between all of these nodes is called, you guessed it, consensus.
The solution to the Byzantine Generals Problem isn’t simple by any means. It involves some hashing, heavy computing work, and communication between all of the nodes (generals) to verify the message.
Next Steps
If you still find yourself a bit confused about the Byzantine Generals Problem, don’t fret. We’ve gathered a few video explanations to help you better understand the Byzantine Generals Problem, and the ensuing development of “Byzantine Fault Tolerance”, the primary method the Bitcoin network uses to generate chains of Hashcash-style proof-of-work (or mining).
Here’s a <1-minute explanation with dramatic music (which Numb3rs is a great show for everyone’s inner math nerd).
Here’s a <25-minute explanation by Ivan on Tech that goes from a bird’s eye view of the Byzantine Generals Problem, and more of the nitty-gritty solutions.
And here’s a <1.5-hour lecture by the one and only Andreas M. Antonopoulos (whose name ironically sounds like a Byzantine General) on consensus algorithms, the Byzantine Generals Problem, and a lot of stuff in between.
Best of luck in your learning journey, soldier!