5

Consider the simplest case with three nodes A, B, C, with:

Q(A) = {{A,B}}
Q(B) = {{B,C}}
Q(C) = {{C,A}}

So a cyclic graph. How can this ever reach consensus? In order for A to make a decision, he goes to B for advice, in order for B to make a decision, he goes to C for advice, and in order for C to make a decision, he has to go to A for advice. Wouldn't this be perpetual?

7

The way the SCP protocol works, you include your quorum slices in your vote messages. So following your example, nodes would say the following:

  • A says. "I vote to accept statement a so long as B accepts it, too."
  • B says, "I vote to accept statement a so long as C accepts it, too."
  • C says, "I vote to accept statement a so long as A accepts it, too."

So now the nodes multicast their votes around, and each node needs to ask itself whether a quorum voted for a. Well, the set of nodes that voted for a is U = {A, B, C}. Is U a quorum? It's a quorum if it contains a slice of each of its members, and as it happens, it does:

  • {A,B} is a slice for A and a subset of U
  • {B,C} is a slice for B and a subset of U
  • {C,A} is a slice for C and a subset of U

So yes, U is a quorum and the quorum then accepts statement a.

The key is that you don't have to accept something to vote for it. The vote message you broadcast is conditioned on other people voting the same way.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.