If anyone was working on a different attack time, they switch to this one...
If a 2nd "general" solves a block a split-second after the original, then the 1st one "wins" since they broadcast earlier and will get above 51% of the network following their chain first.
Thank you that was one question i had.
So the problem the generals have is they are trying to arrive at an agreement on what time to attack the city, obviously the attack will occur in the future after the agreement is made.
When a block is solved, what is broadcast to the network is first a "proof of work" but also a record of all of the generals votes. Essentially whoever is able to solve the block first has the authority to set in stone what all of the votes were for that round. After twelve rounds, they agree that whichever time had the most votes as recorded in all 12 blocks of the block chain will be the time they will all attack the city.
Does this sound like a good description? I feel like I'm getting closer!
I just re-read this:
https://bitcointalk.org/oldSiteFiles/byzantine.html (related to proof-of-work chains)
and found a nice classic version:
http://pages.cs.wisc.edu/~sschang/OS-Qual/reliability/byzantine.htmThere are two directions to choose from:
1) Complex, precise, "military style":
Byzantine General Problem
The Classic Problem
Each division of Byzantine army are directed its own general
Generals, some of which are traitors, communicate each other by messengers
Requirements:
All loyal generals decide upon the same plan of action
A small number of traitors cannot cause the loyal generals to adopt a bad plan
The problem can be restated as:
All loyal generals receive the same information upon which they will somehow get to the same decision
The information sent by a loyal general should be used by all the other loyal generals
The above problem can be reduced into a series of one commanding general and multiple lieutenants problem - Byzantine Generals Problem :
All loyal lieutenants obey the same order
If the commanding general is loyal, then every loyal lieutenant obeys the order she sends
Reliability by Majority Voting
One way to achieve reliability is to have multiple replica of system (or component) and take the majority voting among them
In order for the majority voting to yield a reliable system, the following two conditions should be satisfied:
All non-faulty components must use the same input value
If the input unit is non-faulty, then all non-faulty components use the value it provides as input
Impossibility Results
No solution exists if less than or equal to 2/3 generals are loyal
A Solution with Oral Messages - No Signature
Oral Message Requirements and their Implications
A1 - Every message that is sent is delivered correctly
The failure of communication medium connecting two components is indistinguishable from component failure
Line failure just adds one more traitor component
A2 - The receiver of a message knows who sent it
No switched network is allowed
The later requirement -- A4 nullifies this constraint
A3 - The absence of a message can be detected
Timeout mechanism is needed
Solution
If less than 1/3 generals are traitors, this problem can be solved....
http://pages.cs.wisc.edu/~sschang/OS-Qual/reliability/byzantine.htm2) Simple:
The essence is creating order without a central power being in charge.
"The first general to send a text message about a current victory wins a cash prize, and everyone starts the next battle".