  Byzantine fault-tolerant (BFT) consensus algorithms are at the core of
providing safety and liveness guarantees for distributed systems that must
operate in the presence of arbitrary failures. Recently, numerous new BFT
algorithms have been proposed, not least due to the traction blockchain
technologies have garnered in the search for consensus solutions that offer
high throughput, low latency, and robust system designs. In this paper, we
conduct a systematic survey of selected and distinguished BFT algorithms that
have received extensive attention in academia and industry alike. We perform a
qualitative comparison among all algorithms we review considering message and
time complexities. Furthermore, we decompose each consensus algorithm into its
constituent subprotocols for replication and view change backed by intuitive
figures to illustrate the message-passing pattern. We also elaborate on the
strengths and weaknesses of each algorithm as compared to the state-of-the-art
approaches.
