# Dolev et alia Algorithm

• polynomical message complexity
• 2m+3 message rounds

This is an example of a time-message trade off

# The Basis of the Algorithm

• LOW = m + 1, HIGH = 2m + 1
• any subset of at least LOW processors has at least one nonfaulty processor
• we can throw out any assertion that is denied by at least LOW processors
• any subset of at least HIGH processors includes a m + 1 (a majority of) processors that are nonfaulty
• we can rely on an assertion that is supported by the majority of a subset of xHIGH processors

# Messages Used by the Algorithm

• * Þ sender is asserting a value of 1
• name of a processor Þ sender received a * from the processor

Wix = set of processors that sent x to i = witnesses of x for i

i is a direct supporter of P iff P Î Wi*

i is an indirect supporter of P iff | WiP | ³ LOW

i confirms P iff | WiP | ³ HIGH

To make this algorithm work, I believe we need to assume the following:

• "broadcast" means to send the message to all processors, including one's self
• therefore, whenever a process sends a message to the other processors, it will receive the same message, and will be added to its own witness set for that message in the next round

# Initiation Condition

• 2nd round: receives a * from source in round 1
• K+1st round: at least LOW+max(0,ëK/2 û-2) processors are confirmed

# The Algorithm

• round 1: source broadcasts value to all processors
• round k > 1:
• broadcast the names of all processors for which it is a direct or indirect supporter and which it has not previously broadcast
• if initiation condition was true and end of previous round and * was not previously broadcast, broadcast * now
• commit to 1 if HIGH processors are confirmed
• after round 2m+3, if 1 is not commited, agree on 0

If time permits, go though an example of the algorithm.

In round 1, suppose the faulty processor A initiates, sending "*" messages to D & B, but not to C.

At the start of round 2, processors B & D have each received a "*" message from A and so become direct supporters of A. They respond by broadcasting "A". Since this is round 2, B & D initiate, which causes them to broadcast "*"

At the start of round 3, processors B & D have received "*" from B & D, so both become direct supporters of B & D, and broadcast "B" & "D". Processor C has received "*" from B & D, so it becomes a supporter of both, and broadcasts "B" & "D". Processor C has also received 2 witness messages for A, from B & D. Since LOW=m+1=2, C now becomes an indirect supporter of A and so it also broadcasts "A".

At the start of round 4, processor C has 3 witnesses for B & D. Since LOW + max{0, ëK/2 û -2} = 2, C satisfies the initiation condition. C initiates broadcasts "*".

At the start of round 5, processors B, C, & D have all just received "*" from C. They become direct supporters of C and broadcast "C".

By the end of round 5 each nonfaulty processor has confirmed HIGH = 3 processors supporting commitment, so all three nonfaulty processors commit.

What happens if the fault processor A only sends a "*" message to one of the other processors?

What happens if the first initiating processor is not faulty?

# Analysis of Dolev Algorithm

• Number of rounds may be up to 2m+3
• What is the worst-case number of messages?
The text says it is polynomial. What is the polynomial?