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

Byzantine Fault Tolerant Replicated State Machine library

The consumer of the library is expected to distribute client requests to all nodes, and not just to the leader node.

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.

Clone this wiki locally