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

Byzantine Fault Tolerant Replicated State Machine library

The library is expected to be embedded in a distributed service (henceforth - 'the application') and each client request should be disseminated to all instances of the library and passed into the library via a call to SubmitRequest.

The library ensures replication of the requests among instances of itself in a total order manner, and delivery of these requests back to the application by invoking DeliverRequests.

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