Skip to content
yacovm edited this page May 21, 2019 · 38 revisions

Byzantine Fault Tolerant Replicated State Machine library

The Controller receives clients' requests, calls a Timeouter on each request and keeps it in the RequestPool. If the current View indicates that this process is the leader then the Controller batches requests with the Batcher, making sure first to check if the VerificationSequence has changed and if so it verifies each request. Then with the help of the Assembler it builds a new Proposal which is then proposed to the current view.

The View runs all three phases of the normal path, prePrepare, prepare, and commit. If it finished successfully it delivers the decision by calling the Decider. The View and the RequestPool may complain to the ViewChanger by sending a view change message.

The ViewChanger runs the view change protocol and informs the Controller about the new view. The Controller then aborts the current View and uses the ViewBuilder to start a new one.

The Synchronizer is used for replication when a node is behind. It is called by the View when it suspects that something is wrong.

Leader rotation

In a Byzantine tolerant algorithm, whenever a node suspects a leader is offline or misbehaving, it broadcasts a vote to move to a new view, with a new leader. Let the ID of the current leader be denoted i. the next leader to be elected j is the lowest j such that j>i , or if no such ID exists - then the lowest ID (wrap-around the IDs).

Clone this wiki locally