Failure Nodes Under Blocking Number At INIT Stage

Under situation:
 
  • Suffrage group members should vote for INIT stage.
  • But some nodes does not offer the INIT ballot,
  • The number of these nodes is under blocking number.
Expected actions:
 
  • Consensus does not stop.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
nodes:
  n3:
    modules:
      ballot_maker:
        name: ConditionBallotMaker
        conditions:
          # will not make INIT ballot when height, 13
          - condition: ballot.next_height="13" AND ballot.stage in ("INIT")
            actions:
              - action: empty-ballot
  
conditions:
  all:
    # base state
    - current_state="booting" AND new_state="joining"
    - current_state="joining" AND new_state="consensus"
    
    # got ACCEPT majority for height, 12 and round, 0
    - m="check majority" AND height="12" AND round=0 AND stage="ACCEPT" AND is_finished=true
    
    # got INIT majority for height, 13 and round, 0
    - m="check majority" AND height="13" AND round=0 AND stage="INIT" AND is_finished=true
    
    # new block created
    - m="new block created" AND block.height="13" AND block.round=0
1
2
3
4
 $ ./contest run failure-voting-init-under-blocking-number.yml \
     --log ./contest-failure-voting-init-under-blocking-number
 $ echo $?
 0

This is the filtered majority checking messages:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
$ cat ./contest-failure-voting-init-under-blocking-number/n0.log | \
     grep -i 'check majority' | \
     jq -c '[.height, .round, .stage, .total, .threshold, .is_finished, .m]' | \
     column -s ',' -t
["11"  0  "INIT"    4  3  false  "check majority"]
["11"  0  "INIT"    4  3  false  "check majority"]
["11"  0  "INIT"    4  3  true   "check majority"]
["11"  0  "SIGN"    4  3  false  "check majority"]
["11"  0  "SIGN"    4  3  false  "check majority"]
["11"  0  "SIGN"    4  3  true   "check majority"]
["11"  0  "SIGN"    4  3  true   "check majority     but closed"]
["11"  0  "ACCEPT"  4  3  false  "check majority"]
["11"  0  "ACCEPT"  4  3  false  "check majority"]
["11"  0  "ACCEPT"  4  3  true   "check majority"]
["11"  0  "ACCEPT"  4  3  true   "check majority     but closed"]
["12"  0  "INIT"    4  3  false  "check majority"]
["12"  0  "INIT"    4  3  false  "check majority"]
["12"  0  "INIT"    4  3  true   "check majority"]
["12"  0  "SIGN"    4  3  false  "check majority"]
["12"  0  "SIGN"    4  3  false  "check majority"]
["12"  0  "SIGN"    4  3  true   "check majority"]
["12"  0  "SIGN"    4  3  true   "check majority     but closed"]
["12"  0  "ACCEPT"  4  3  false  "check majority"]
["12"  0  "ACCEPT"  4  3  false  "check majority"]
["12"  0  "ACCEPT"  4  3  true   "check majority"]
["12"  0  "ACCEPT"  4  3  true   "check majority     but closed"]
["13"  0  "INIT"    4  3  false  "check majority"]
["13"  0  "INIT"    4  3  false  "check majority"]
["13"  0  "INIT"    4  3  true   "check majority"]
["13"  0  "SIGN"    4  3  false  "check majority"]
["13"  0  "SIGN"    4  3  false  "check majority"]
["13"  0  "SIGN"    4  3  true   "check majority"]
["13"  0  "SIGN"    4  3  true   "check majority     but closed"]
["13"  0  "ACCEPT"  4  3  false  "check majority"]
["13"  0  "ACCEPT"  4  3  false  "check majority"]
["13"  0  "ACCEPT"  4  3  true   "check majority"]
["13"  0  "ACCEPT"  4  3  true   "check majority     but closed"]
["14"  0  "INIT"    4  3  false  "check majority"]
["14"  0  "INIT"    4  3  false  "check majority"]
["14"  0  "INIT"    4  3  true   "check majority"]

As the result, the consensus process did not stop, n0 stores the next block, 13.