- BEP-172: Improvement on BSC validator committing stability
This BEP introduces an update for parlia consensus about the behavior when
slash happend, so that the network will be more stable and efficient.
This BEP introduces an update for parlia consensus, which changes the
delay setting for
offturn validators. When the validator
inturn missed his turn to commit block, the block mined by the
offturn validator selected randomly would be committed as soon as possible(4 or 3 seconds).
This BEP is a draft
Before this BEP, a
slash would happen when a validator missed his turn to commit a valid block. It would take some time longer than expected 3 seconds for the specific block mined with the
delay mechanism, and even worse with the calculation algorithm deciding how long would be delayed when the block mined by
offturn validator could be committed. And it took quit a long time (might be more than 1 minute) for the network recovering back to the expected block committing order with expected time duration(3 seconds).
With this BEP we rewrite the calculation algorithm for the
delay time, so that it should be able to commit block in 4 seconds for the selected
offturn validator when the
inturn validator missed his turn. What’s more, the
slash will not have bad influence on the future blocks which means the network will recover to expected block producing duration in time.
- All validators would be involved to calculate the
delaytime when committing the block mined by himself currently, and when the
inturnvalidator missed his turn, the fastest-with the smallest
delayduration equals to 4 seconds-
offturnvalidator might be the one that had signed recently which led to some other
offturnvalidator be the valid selected one to commit block. This is how we observed a block be committed in more than 4 seconds when the
slashhappend. In this BEP, we remove the
recently signedvalidators off from the candidate set for calculating
delayduration from 1 seconds(then the duration would be 3+1=4 seconds) up.
- When a
slashhappend, things would go wrong for quite a long time later on. For example, when
slashedon block_100 and
offturnvalidator_B took his place to commit the block of number 100. However validator_B should be
inturnfor committing block_101, then it would fail to commit block_101 since he had committed block_100
recently. So although there was actually no
slashhappend(all validator worked appropriately), we still need to
delaysome time (1 second or more) to wait for the
offturnvalidator committing the block since the
recentlycommitted some block earlier.In this BEP, we reduce the shortest duration to zero second for this specific scenario which means blocks should be able to committed in expected duration (3 seconds) when all validators workd propriately.