-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[NEO3] Adding a Fallback Consensus #300
Comments
@toghrulmaharramov I like the idea of a fallback mechanism. However, changing the field to |
@anthdm I was writing this with the current implementation in mind. Thanks to the block header versioning, we could easily modify the |
This is in my opinion one of the most important improvements that are being suggested at the moment. |
@lerider I had discovered an issue with the protocol when writing the formal proof for the fallback that will prevent the fallback consensus from working with the current version of dBFT. I will PM you the details on Discord later today. |
Hi @toghrulmaharramov, we miss you, my friend! You should see the new dBFT 2.0. Solid as a rock! :D You are also part of it. I will leave this closed for now, Tog. I believe that the discussion now might be in another direction. |
I think the idea is still valid Vitor, lets keep open. |
This is not possible nowadays, @igormcoelho: But the solution has other insights, I believe it is better to open a new issue with the specific modification idea, but not related to the problem. |
I guess there's a way to implement togs idea as soon as we have the interop for GetConsensusScript I proposed |
This is a quite complex situation to deal with StandyBy Validators. I would prefer this proposal here: neo-project/proposals#82 Lightning vote is like moving the voting even to the mempool level if certain conditions happen. |
@igormcoelho and @toghrulmaharramov, I think that this proposal can be closed. Minor adjust:
About the fallback consensus:
|
Problem
In the current implementation, a block is published as soon as the Speaker
p
's proposal receives at leastn - f [(n - 1)/3]
signatures from the Consensus Nodes in a certain timeframe. If not enough signatures are received during the aforementioned timeframe, a View Changev
is required to elect a new Speaker viap = h [block index] - v mod n [number of Consensus Nodes]
to propose a new block. However, if the number of malicious nodes (both intentionally or unintentionally) exceedsf
, but is below2f + 1
, the consensus stalls and has to be manually reset.Solution
The proposed solution requires a few changes to the current implementation to become functional. Firstly, the
NextConsensus
attribute of the block header has to be abandoned in favour of aViewChange
attribute which is going to be equal to a size of 1 byte. Secondly, a list of Standby Nodes will have to be elected alongside the Consensus Nodes during the voting procedure (would include the candidates which did not receive enough votes to become a Consensus Node). To avoid the consensus stalls, a fallback consensus will kick in if thev > n
, requiringn
Standby Nodes to confirm the last available block proposal. In case the proposal receives at leastn - f
signatures from the Standby Nodes, the Standby Nodes that received the most votes are swapped in for the Consensus Nodes which failed to sign the latest block proposal. The swapped out Consensus Nodes will be demoted to the end of the Standby Node list.The text was updated successfully, but these errors were encountered: