BEP-172: Improvement on BSC validator committing stability
1. Summary
This BEP introduces an update for parlia consensus about the behavior when slash happend, so that the network will be more stable and efficient.
2. Abstract
This BEP introduces an update for parlia consensus, which changes the timestamp and 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).
3. Status
This BEP is a draft
4. Motivation
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 offturn validation 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.
5. Specification
5.1 overall workflow
5.2 Remove recentlySigned validators from the candidate set
- All validators would be involved to calculate the delaytime when committing the block mined by himself currently, and when theinturnvalidator missed his turn, the fastest-with the smallestdelayduration equals to 4 seconds-offturnvalidator might be the one that had signed recently which led to some otheroffturnvalidator be the valid selected one to commit block. This is how we observed a block be committed in more than 4 seconds when theslashhappend. In this BEP, we remove therecently signedvalidators off from the candidate set for calculatingdelayduration from 1 seconds(then the duration would be 3+1=4 seconds) up.
5.3 Reduce minimum delay duration to be zero added to 3 seconds
- When a slashhappend, things would go wrong for quite a long time later on. For example, wheninturnvalidator_A wasslashedon block_100 andoffturnvalidator_B took his place to commit the block of number 100. However validator_B should beinturnfor committing block_101, then it would fail to commit block_101 since he had committed block_100recently. So although there was actually noslashhappend(all validator worked appropriately), we still need todelaysome time (1 second or more) to wait for theoffturnvalidator committing the block since theinturnvalidator hadrecentlycommitted 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.
