Voting Stage

The voting stages was already explained briefly. At this section, more details will be described.

In mitum, there are 3 voting stages, INIT, SIGN and ACCEPT. These have very similar role with classic PBFT. The voting flows thru stages:

INIT -> SIGN -> ACCEPT

Strictly to say, there is one more important step between INIT and SIGN, that is Proposal.

INIT -> Proposal -> SIGN -> ACCEPT

Except proposal, voting occurs and then consensus process moves to next stage when the voting result reaches to majority(over voting threshold).

INIT: Stage For Suffrage Group

The first step of consensus starts at INIT voting. Unlike the other stages all the suffrage group members(m0, … , m9) votes at this stage. INIT stage has important features:

  • Finally establishing the next block of the previously proposed proposal.
  • Making agreement for next block
  • Making agreement for new round

The ballot for INIT stage has information:

  • New block
  • Round of new block(previous voting)
  • Next round

INIT voting is finished, this means, network gets agreement on the next block and new round. Node can select acting suffrage group members for next block and new round.

When INIT voting is finished, the new proposer of newly selected acting suffrage group should propose new proposal for next block to the entire network.

Note

  1. Node is booted and previous block is already established. Does INIT ballot should contain new block and previous round information?
  1. TL;DR Yes. Basically INIT stage works for verifying the previous voting result and finally establishing it. If previous voting is already established, the new block and it’s round information will be used the new starting round is based on the valid block or not.

Proposal

Proposal is proposed by proposer, which is selected node from acting suffrage group. Proposal has this information:

  • Next block
  • Next round
  • Messages for next block

Block is the result of validating proposal, so suffrage group members will validate proposal.

If proposal is not received:

  • Node in the suffrage group waits the proposal from the proposer for the given time.
  • Node does not receive the expected proposal.
  • Node will start new round.
  • In the new round, the another acting suffrage group and another proposer will be selected.

If proposal is received, but invalid:

  • Node in the suffrage group receives the expected proposal.

  • But it has some problems:

    • Proposal message is not well-formatted, or
    • The information of proposal is not correct, or
    • Messages in the proposal is not valid, etc.
  • Node will start new round.

Non-intact proposer will be evaluated also as faulty node by the suffrage group.

Stages For Acting Suffrage Group

SIGN and ACCEPT stage is done by acting suffrage group, not by suffrage group.

Even if acting suffrage group fails to get agreement at SIGN or ACCEPT, the consensus process keeps going. The agreement of suffrage group decides to the next block, not by one of acting suffrage group.

For example,

  • Acting suffrage group members: m0, m1, m2, m3
  • Proposer: m0
  • Threshold for majority: 3 of 4
  • Proposal: P0

Voting for the round, R0

node stage block
m0 SIGN H0
m1 SIGN H0
m2 SIGN H1
m3 SIGN H1

This SIGN voting fails to get agreement, * H0: m0, m1; under threshold 3 * H1: m2, m3; also under threshold 3

No hash failed to be over threshold(3). With this voting result, they move to the next stage, ACCEPT:

node stage block
m0 ACCEPT H0
m1 ACCEPT H0
m2 ACCEPT H1
m3 ACCEPT H1

Even if agreement failed, why acting suffrage members moves to ACCEPT? In ISAAC+, the agreement failure inside acting suffrage group does not mean the agreement failure of entire network. As described earlier, acting suffrage group exists for proposing proposal and verifying the ability and health of node continuously. The voting of acting suffrage group will be evaluated by all the suffrage group members and if some node be thought as faulty node, it will be handled by network policy and rule.

After ACCEPT stage is finished, the next INIT stage will be like this;

node stage block
m0 INIT H0
m1 INIT H0
m2 INIT H1 *
m3 INIT H1 *
m4 INIT H0
m5 INIT H0
m6 INIT H0
m7 INIT H0
m8 INIT H0
m9 INIT H1 *

The result of voting:

  • H0: m0, m1, m4, m5, m6, m7, m8
  • H1: m2, m3, m9

H0 gets votes over threshold, 7 in the suffrage group

Note

  1. The threshold, 7 is different from 3, threshold of acting suffrage group, why?
  1. The default threshold percent is 67%, this means at least 2/3 nodes should agree on the same result. The 7 is 67% of the number of all the suffrage group members.

The suffrage group agreed on H0 and H0 will be established as the new block, and then newly selected acting suffrage group will start new round for next block.

SIGN

After agreement of INIT stage, consensus process moves to SIGN stage. The voting at this stage is on the proposal for the next block. Basically proposal has the contents of the next block, so node checks and validates the content of proposal. Each node can produce the next block from proposal and vote by the produced next block.

The ballot for SIGN stage has this information:

  • The latest block
  • Round
  • Proposal
  • Next block

When same next blocks from SIGN ballots reaches majority(over threshold), the consensus process moves to ACCEPT stage.

ACCEPT

ACCEPT stage is the final stage of acting suffrage group. The consensus process will work if INIT stage be started after SIGN without ACCEPT stage. This stage maybe looks redundant, but there are some reasons:

  • During 2 stage, SIGN and ACCEPT by the acting suffrage group, the suffrage group will have enough time to share result rather than with only SIGN stage.
  • The minority node at SIGN stage can have chance to correct its decision. With node maybe estimated as none-intact node by only SIGN voting.

The ballot for ACCEPT stage has this information:

  • The latest block
  • Round
  • Proposal
  • Next block