In recent years, crypto-currencies have been quite popular as an alternative form of payments. They are underpinned by a breakthrough technology called Blockchain which extensively use a number of cryptographic mechanisms and other advanced techniques from the domain of distributed computing. This blockchain technology has received unparalleled attention from academia, industry, and governments worldwide and is considered to have the potential to disrupt several application domains, other than currencies, touching all spheres of our lives. The sky-rocket anticipation of its potential has caused a wide-scale exploration of its usage in different application domains. This has resulted in a plethora of blockchain systems for various purposes. However, many of these blockchain systems suffer from serious shortcomings related to their performance and security, which need to be addressed before any wide-scale adoption can be achieved. A crucial component of any blockchain system is its underlying consensus algorithm, which determines its performance and security in many ways. Therefore, to address the limitations of different blockchain systems, several existing as well novel consensus algorithms have been introduced. A systematic analysis of these algorithms will help to understand how and why any particular blockchain performs the way it functions.
Towards this aim, there are a number of existing works that have surveyed and reviewed a number of consensus algorithms. However, all these works have some major shortcomings. For example, the factors upon which the consensus algorithms have been analysed are not comprehensive. Importantly, a wide range of consensus algorithms utilised in public blockchain systems supporting mainly crypto-currencies have different variants. Such variants and their internal mechanisms utilised in many existing crypto-currencies have not been considered at all. This article fills these gaps by analysing a wide range of consensus algorithms leveraged in different public blockchain systems using a comprehensive taxonomy of properties. We have also analysed more than a hundred top crypto-currencies belonging to different categories of consensus algorithms to understand their properties and implicate different trends in these crypto-currencies. Finally, we have presented a decision tree of the reviewed algorithms to be used as a tool to test the suitability of consensus algorithms for a particular application under different criteria.