Table of contents
1.
Introduction
2.
Consensus Algorithm: What Is It?  
2.1.
How Does It Work?  
2.2.
Example: Proof of Work in Python  
3.
What Are the Byzantine Generals' Problem and the Tolerance of the Byzantine Defects?  
3.1.
Byzantine Fault Tolerance (BFT)  
3.2.
Example: Practical Byzantine Fault Tolerance (PBFT)  
3.3.
Create nodes & PBFT network  
3.4.
Why Is BFT Important?  
4.
Various Consensus Algorithms and How They Work
4.1.
1. Proof of Stake (PoS)
4.1.1.
How It Works
4.2.
2. Delegated Proof of Stake (DPoS)
4.2.1.
How It Works
4.3.
3. Proof of Authority (PoA)
4.3.1.
How It Works
4.4.
4. Practical Byzantine Fault Tolerance (PBFT)
4.4.1.
How It Works
5.
What Are the Types of Consensus Algorithms?
5.1.
1. Permissionless (Public) Consensus Algorithms
5.2.
2. Permissioned (Private) Consensus Algorithms
6.
Consensus Algorithm: Application in Cryptocurrencies  
6.1.
1. Bitcoin: Proof of Work (PoW)  
6.1.1.
Example: PoW in Bitcoin  
6.2.
2. Ethereum: Proof of Stake (PoS)  
6.2.1.
Example: PoS in Ethereum  
6.3.
Why Are Consensus Algorithms Important in Cryptocurrencies?  
7.
Frequently Asked Questions
7.1.
Why are consensus algorithms important in blockchain?
7.2.
Which consensus algorithm is the most energy-efficient?
7.3.
Can a blockchain use multiple consensus algorithms?
8.
Conclusion
Last Updated: Mar 11, 2025
Medium

Consensus Algorithm in Blockchain

Author Rahul Singh
0 upvote
Career growth poll
Do you think IIT Guwahati certified course can help you in your career?

Introduction

A consensus algorithm in blockchain is a mechanism used to achieve agreement on a single data value among distributed network nodes. It ensures that all participants in a decentralized system maintain a consistent and tamper-proof ledger. Popular consensus algorithms include Proof of Work (PoW), Proof of Stake (PoS), and Byzantine Fault Tolerance (BFT). 

Consensus Algorithm in Blockchain

In this article, you will learn about different types of consensus algorithms, their working principles, and their significance in blockchain networks.

Consensus Algorithm: What Is It?  

A consensus algorithm is a process used in blockchain networks to achieve agreement among all participants about the state of the ledger. In simple terms, it’s a way to make sure everyone in the network agrees on which transactions are valid & which blocks should be added to the chain. Without this agreement, the blockchain would fall apart because different nodes might have different versions of the truth.  

Think of it like a group project where everyone needs to agree on the final report. If one person says the report is done, but another says it’s not, there’s confusion. The consensus algorithm is like the rulebook that ensures everyone agrees on the final version.  

How Does It Work?  


Consensus algorithms work by following a set of rules that all participants in the network must follow. These rules ensure that:  

1. All nodes (participants) agree on the same data.  
 

2. Invalid transactions are rejected.  
 

3. The network remains secure & resistant to attacks.  
 

For example, in Bitcoin, the consensus algorithm is called Proof of Work (PoW). Here’s how it works:  
 

1. Miners compete to solve a complex mathematical puzzle.  
 

2. The first miner to solve it gets to add a new block to the blockchain.  
 

3. Other nodes verify the solution & agree that the block is valid.  

Example: Proof of Work in Python  

Let’s look at a simple example of how Proof of Work works. We’ll create a basic blockchain & implement a PoW algorithm to add blocks.  

import hashlib  
import time  


class Block:  
    def __init__(self, index, previous_hash, timestamp, data, nonce=0):  
        self.index = index  
        self.previous_hash = previous_hash  
        self.timestamp = timestamp  
        self.data = data  
        self.nonce = nonce  
        self.hash = self.calculate_hash()  


    def calculate_hash(self):  
        block_string = f"{self.index}{self.previous_hash}{self.timestamp}{self.data}{self.nonce}"  
        return hashlib.sha256(block_string.encode()).hexdigest()  


    def mine_block(self, difficulty):  
        target = '0'  difficulty  
        while self.hash[:difficulty] != target:  
            self.nonce += 1  
            self.hash = self.calculate_hash()  
        print(f"Block mined: {self.hash}")  


class Blockchain:  
    def __init__(self, difficulty=4):  
        self.chain = [self.create_genesis_block()]  
        self.difficulty = difficulty  


    def create_genesis_block(self):  
        return Block(0, "0", time.time(), "Genesis Block")  


    def get_latest_block(self):  
        return self.chain[-1]  


    def add_block(self, new_block):  
        new_block.previous_hash = self.get_latest_block().hash  
        new_block.mine_block(self.difficulty)  
        self.chain.append(new_block)  


Create a blockchain & add blocks  

blockchain = Blockchain()  
blockchain.add_block(Block(1, "", time.time(), "Block 1 Data"))  
blockchain.add_block(Block(2, "", time.time(), "Block 2 Data"))  


Print the blockchain  

for block in blockchain.chain:  
    print(f"Index: {block.index}, Hash: {block.hash}, Data: {block.data}")  


In this Code:   

1. Block Class: Represents a single block in the blockchain. It contains data like index, timestamp, & the previous block’s hash. The `mine_block` function simulates Proof of Work by finding a hash with a specific number of leading zeros.  
 

2. Blockchain Class: Manages the chain of blocks. It starts with a genesis block & allows new blocks to be added after mining.  
 

3. Mining: The `mine_block` function keeps changing the nonce (a random number) until the block’s hash meets the difficulty requirement. This process is computationally intensive, mimicking real-world mining.  


This example shows how consensus algorithms like Proof of Work ensure that blocks are added to the blockchain in a secure & agreed-upon manner.  

What Are the Byzantine Generals' Problem and the Tolerance of the Byzantine Defects?  

The Byzantine Generals' Problem is a classic problem in computer science that explains why achieving consensus in a distributed system is challenging. It’s named after a scenario where several Byzantine generals are surrounding a city & must agree on a common plan of action (attack or retreat). However, some generals might be traitors who send conflicting messages to confuse others. The goal is to ensure that all loyal generals agree on the same plan, even if some participants are unreliable or malicious.  

In blockchain terms, this problem translates to ensuring that all nodes in the network agree on the state of the ledger, even if some nodes are faulty or trying to manipulate the system. This is where Byzantine Fault Tolerance (BFT) comes into play.  

Byzantine Fault Tolerance (BFT)  

Byzantine Fault Tolerance is the ability of a system to continue functioning correctly even if some components fail or act maliciously. In blockchain, BFT ensures that the network can reach consensus despite the presence of faulty or malicious nodes.  

Example: Practical Byzantine Fault Tolerance (PBFT)  

One of the most well-known BFT algorithms is Practical Byzantine Fault Tolerance (PBFT). It’s used in systems where participants are known & trusted to some extent, like private blockchains. Let’s break down how PBFT works:  

1. Nodes in the Network: There’s a leader (primary node) & several backup nodes.  
 

2. Consensus Process:  

  • The leader proposes a block.  
     
  • Backup nodes validate the block & send their approval or rejection.  
     
  • If a majority of nodes agree, the block is added to the chain.  


Let’s take a look at the simplified Python implementation of PBFT:  

class Node:  
    def __init__(self, id, is_primary=False):  
        self.id = id  
        self.is_primary = is_primary  
        self.messages = []  


    def propose_block(self, block):  
        if self.is_primary:  
            print(f"Node {self.id} (Primary) proposing block: {block}")  
            return block  
        else:  
            return None  


    def validate_block(self, block):  
         Simulate validation logic  
        if block:  
            print(f"Node {self.id} validating block: {block}")  
            return True  
        return False  


class PBFT:  
    def __init__(self, nodes):  
        self.nodes = nodes  
        self.primary = next(node for node in nodes if node.is_primary)  


    def reach_consensus(self, block):  
         Primary proposes the block  
        proposed_block = self.primary.propose_block(block)  
        if not proposed_block:  
            print("No block proposed by primary.")  
            return False  


Backup nodes validate the block  

approvals = 0  
for node in self.nodes:  
   if not node.is_primary and node.validate_block(proposed_block):  
      approvals += 1  

 

Check if a majority agrees  

    if approvals >= len(self.nodes) // 2:  @   print(f"Consensus reached. Block {proposed_block} added to the chain.")  @      return True  @  else:  @      print("Consensus not reached.")  @  return False 

Create nodes & PBFT network  

nodes = [Node(i, is_primary=(i == 0)) for i in range(4)]  
pbft = PBFT(nodes)  


Simulate consensus process  

pbft.reach_consensus("Block 1 Data")  


In this Code:   

1. Node Class: Represents a node in the network. The primary node proposes blocks, while backup nodes validate them.  
 

2. PBFT Class: Manages the consensus process. It ensures that a majority of nodes agree on the proposed block.  
 

3. Consensus Process:  

  • The primary node proposes a block.  
     
  • Backup nodes validate the block & send their approval.  
     
  • If a majority agrees, the block is added to the chain.  


This example demonstrates how PBFT ensures consensus in a network with potentially faulty or malicious nodes.  

Why Is BFT Important?  

BFT is crucial for blockchain systems because it ensures:  

1. Security: The network can withstand attacks from malicious nodes.  
 

2. Reliability: The system continues to function even if some nodes fail.  
 

3. Decentralization: No single node has complete control over the network.  

Various Consensus Algorithms and How They Work

Consensus algorithms are essential for blockchains because they help maintain the security and integrity of the network. Below are some widely used consensus mechanisms:

1. Proof of Stake (PoS)

Unlike PoW, PoS selects validators based on the number of coins they hold.

How It Works

  • Users lock up a certain amount of cryptocurrency.
     
  • A validator is chosen randomly based on the stake size.
     
  • The selected validator adds the block and earns rewards.

2. Delegated Proof of Stake (DPoS)

This is an improved version of PoS, where stakeholders vote for delegates who validate transactions.

How It Works

  • Users vote for trusted delegates.
     
  • Elected delegates validate transactions.
     
  • Delegates earn rewards and share them with voters.

3. Proof of Authority (PoA)

PoA is a reputation-based consensus where validators are known and trusted entities.

How It Works

  • Only approved validators can validate transactions.
     
  • Used in private and consortium blockchains.

4. Practical Byzantine Fault Tolerance (PBFT)

PBFT ensures that even if some nodes act maliciously, the network remains secure.

How It Works

  • Nodes communicate to reach an agreement.
     
  • A majority vote confirms the transaction.

What Are the Types of Consensus Algorithms?

Consensus mechanisms can be classified into two main types:

1. Permissionless (Public) Consensus Algorithms

Used in decentralized networks where anyone can participate. Examples:

  • Proof of Work (PoW) - Used in Bitcoin.
     
  • Proof of Stake (PoS) - Used in Ethereum 2.0.

2. Permissioned (Private) Consensus Algorithms

Used in private blockchains where participants are pre-approved. Examples:

  • Proof of Authority (PoA) - Used in enterprise blockchain solutions.
     
  • PBFT - Used in Hyperledger Fabric.

Consensus Algorithm: Application in Cryptocurrencies  

Consensus algorithms are the backbone of cryptocurrencies. They ensure that all participants in the network agree on the state of the blockchain, enabling secure & decentralized transactions. Different cryptocurrencies use different consensus algorithms based on their specific needs. Let’s discuss how consensus algorithms are applied in popular cryptocurrencies like Bitcoin & Ethereum.  

1. Bitcoin: Proof of Work (PoW)  

Bitcoin, the first cryptocurrency, uses the Proof of Work (PoW) consensus algorithm. PoW requires miners to solve complex mathematical puzzles to validate transactions & add new blocks to the blockchain. This process is energy-intensive but ensures security & decentralization.  

Here’s how PoW works in Bitcoin:  

1. Miners collect transactions & bundle them into a block.  
 

2. They compete to solve a cryptographic puzzle by finding a hash that meets a specific condition (e.g., a certain number of leading zeros).  
 

3. The first miner to solve the puzzle broadcasts the block to the network.  
 

4. Other nodes verify the solution & add the block to their copy of the blockchain.
 

Example: PoW in Bitcoin  

Let’s revisit the Proof of Work example from earlier but with a focus on Bitcoin-like implementation:  

import hashlib  
import time  


class Block:  
    def __init__(self, index, previous_hash, timestamp, transactions, nonce=0):  
        self.index = index  
        self.previous_hash = previous_hash  
        self.timestamp = timestamp  
        self.transactions = transactions  
        self.nonce = nonce  
        self.hash = self.calculate_hash()  


    def calculate_hash(self):  
        block_string = f"{self.index}{self.previous_hash}{self.timestamp}{self.transactions}{self.nonce}"  
        return hashlib.sha256(block_string.encode()).hexdigest()  


    def mine_block(self, difficulty):  
        target = '0'  difficulty  
        while self.hash[:difficulty] != target:  
            self.nonce += 1  
            self.hash = self.calculate_hash()  
        print(f"Block mined: {self.hash}")  


class Blockchain:  
    def __init__(self, difficulty=4):  
        self.chain = [self.create_genesis_block()]  
        self.difficulty = difficulty  


    def create_genesis_block(self):  
        return Block(0, "0", time.time(), "Genesis Block")  


    def get_latest_block(self):  
        return self.chain[-1]  


    def add_block(self, new_block):  
        new_block.previous_hash = self.get_latest_block().hash  
        new_block.mine_block(self.difficulty)  
        self.chain.append(new_block)  


Create a blockchain & add blocks  

blockchain = Blockchain()  
blockchain.add_block(Block(1, "", time.time(), "Transaction 1 Data"))  
blockchain.add_block(Block(2, "", time.time(), "Transaction 2 Data"))  


Print the blockchain  

for block in blockchain.chain:  
    print(f"Index: {block.index}, Hash: {block.hash}, Transactions: {block.transactions}")  

2. Ethereum: Proof of Stake (PoS)  

Ethereum, the second-largest cryptocurrency, is transitioning from Proof of Work to Proof of Stake (PoS). In PoS, validators are chosen to create new blocks based on the number of coins they hold & are willing to "stake" as collateral. This reduces energy consumption compared to PoW.  

Here’s how PoS works in Ethereum:  

1. Validators lock up a certain amount of cryptocurrency as a stake.  
 

2. The network randomly selects a validator to propose a new block.  
 

3. Other validators verify the block & agree to add it to the blockchain.  
 

4. Validators earn rewards for participating in the consensus process.  

Example: PoS in Ethereum  

Let’s create a simplified PoS implementation:  

import random  


class Validator:  
    def __init__(self, id, stake):  
        self.id = id  
        self.stake = stake  


    def validate_block(self, block):  
        print(f"Validator {self.id} validating block: {block}")  
        return True  


class PoS:  
    def __init__(self, validators):  
        self.validators = validators  


    def select_validator(self):  
        total_stake = sum(validator.stake for validator in self.validators)  
        selection_point = random.uniform(0, total_stake)  
        current_point = 0  
        for validator in self.validators:  
            current_point += validator.stake  
            if selection_point <= current_point:  
                return validator  
        return None  


    def reach_consensus(self, block):  
        selected_validator = self.select_validator()  
        if selected_validator:  
            print(f"Validator {selected_validator.id} selected to propose block.")  
            if selected_validator.validate_block(block):  
                print(f"Block {block} added to the chain.")  
                return True  
        return False  


 Create validators & PoS network  

validators = [Validator(i, stake=random.randint(1, 10)) for i in range(5)]  
pos = PoS(validators)  


 Simulate consensus process  

pos.reach_consensus("Block 1 Data")  


In this Code :  

1. Validator Class: Represents a validator in the network. Each validator has a stake & can validate blocks.  
 

2. PoS Class: Manages the consensus process. It selects a validator based on their stake & ensures the block is validated.  
 

3. Consensus Process:  

  • A validator is randomly selected based on their stake.  
  •  
  • The selected validator proposes & validates the block.  
     
  • If the block is valid, it’s added to the chain.  

Why Are Consensus Algorithms Important in Cryptocurrencies?  

1. Security: They prevent double-spending & ensure the integrity of the blockchain.  
 

2. Decentralization: They allow multiple participants to agree without a central authority.  
 

3. Efficiency: They enable fast & reliable transaction processing.  

Frequently Asked Questions

Why are consensus algorithms important in blockchain?

Consensus algorithms ensure network security, prevent fraud, and maintain decentralization.

Which consensus algorithm is the most energy-efficient?

Proof of Stake (PoS) is more energy-efficient compared to Proof of Work (PoW).

Can a blockchain use multiple consensus algorithms?

Yes, some blockchains use hybrid models combining different algorithms for better performance and security.

Conclusion

In this article, we explored the Consensus Algorithm in Blockchain, which ensures agreement among distributed nodes for secure and decentralized decision-making. Various algorithms like Proof of Work (PoW), Proof of Stake (PoS), and Practical Byzantine Fault Tolerance (PBFT) help maintain trust, security, and transparency in blockchain networks. Understanding these algorithms is crucial for blockchain development and cryptocurrency systems.

Live masterclass