-
Notifications
You must be signed in to change notification settings - Fork 39
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
Tracking issue for the consensus research #4
Comments
NOTE: This is deprecatedAfter discussion with @junha1 , we have come up with a slight variation of Tendermint suitable for our use cases. I'm looking forward to comments and suggestions. We propose Calmdermint (the name is subject to change), an optimized version of Tendermint which supports early termination of voting phases before timeout expirations and on-demand leader replacement. Thanks to the early termination feature, a long timeout interval, possibly a week, can be adopted, while providing reasonable performance under practical conditions. Thus, nodes can be kept offline for the most of time, preventing unnecessary network congestion and blowup of the chain size, but can make progress as soon as sufficient number of them decide to make progress. The algorithm is guaranteed to be safe when the portion of byzantine nodes is less than 1/3, and it is also guaranteed to be sufficiently fast and make progress (under some fairness assumptions) when the portion of byzantine nodes is less than 1/9. Note that the success of this algorithm heavily depends on the reliability of the leader, but it is practically offset by the stableness of the leader. The following changes will be made to Tendermint consensus algorithm. AS-IS
TO-BEFor the sake of simplicity, we assume there are total
Rough explanation for the early termination logicSuppose that a proposal is broadcasted by a leader. Assuming all non-byzantine nodes are willing to prevote (either to the proposal or to nil) before timeout is expired, the early termination condition Note that the new fault threshold is One weakness of this algorithm is that the proposal phase is not subject to early termination. One might infer from this that a byzantine leader may severely degrade the performance of the entire system by not proposing a block when it is expected to do so, but the risk is offset by the adoption of on-demand leader replacement. Once the leader role is assigned to a responsible node, it will serve the role for a long time, as long as it pleases other nodes. If the leader is unsatisfactory, it can always be replaced, though it might require waiting for a possibly long — but certainly realizable — timeout condition. The bottom line is that we have introduced the safe threshold for early termination by weakening the fault threshold of the consensus, which is acceptable in our use cases. |
SummaryAfter further revision, we come up with Vetomint, which is a variation of Tendermint consensus algorithm that supports preference-based voting on the consensus layer. Unlike Tendermint which requires validators to decide on a block based soley on its validity, participants of a Vetomint consensus system may choose to accept or reject a block based on their preferences. This allows flexibility on the choice of agendas that can be handled by the blockchain system. We have revised the early termination feature of the consensus algorithm to achieve the goal without performance loss, which is critical in our use case where the timeout interval is significant. Vetomint guarantees safety and liveness under less than 1/6 byzantine voting power and an assumption that innocent nodes will eventually agree on a proposal in a unanimous manner. Limitations of TendermintAlthough Tendermint adopts a voting-like procedure to achieve byzantine fault tolerance, it is not designed to support decision-making with preferences. That is, Tendermint requires a shared, deterministic oracle between all innocent participants to determine whether a proposal is acceptable or not, and the preference of each node has nothing to do with this process. This is the case for typical blockchain systems, where whether a proposal block is valid or not is determined soley by the current state of the blockchain and the content of the block. In such systems, validators play the role of "validator", not a participant of a democratic system. However, in reality, we need votes in order to make a unified decision over multiple possible preferences, which cannot be done in Tendermint. For example, a presidential election has no notion of correctness; it is a matter of preference. Note that one may implement a governance protocol on top of the consensus layer, but it brings extra complexity to the system, especially in our simple use case where voters and validators are indistinguishable. ImprovementThe main obstacle with using Tendermint for preference-based voting is that the prevote step of Tendermint may fall into a deadlock-like state, a stuck state that can be resolved only through waiting for a timeout expiration, if votes are split. For example, if half of the validators prevote to a proposal while the other half prevote to nil (i.e. they used veto), nothing but timeout rules can make progress. This is especially problematic for us because we want to adopt a long timeout interval, to reduce traffic and allow nodes to be kept offline for the most of time. Augmenting the Tendermint protocol with an early termination rule requires lowering the byzantine threshold. This is because there must be a buffer threshold between 2/3 and 1 so that a node can early terminate a prevote step if it receives prevote messages exceeding the buffer threshold. Note that 2/3 should not be used for the threshold for early termination, because it allows a single byzantine node to disturb the consensus on an unanimously agreed proposal. We discovered that 5/6 is the desired threshold. The pseudocode of the algorithm can be found here. |
We completed the research about our consensus protocol |
Simperby's consensus MUST be implemented as a simple, safe, and live BFT algorithm.
Conditions
Here are some conditions and relaxations (compared to ordinary blockchain consensuses)
Tracked issues
The text was updated successfully, but these errors were encountered: