New course launching soon Join the waitlist!

Learn Solidity for free

Kickstart your blockchain journey with our free, hands-on Solidity course.

Blockchain

How to Build a Basic Blockchain in Python

How to Build a Basic Blockchain in Python

Blockchain technology is reshaping industries, but how does it work under the hood? In this article, we'll walk through a simple blockchain implementation using Python, perfect for both beginners and those looking to refresh their skills.

What is a Blockchain?

A blockchain is a decentralized ledger that records transactions across multiple computers. The key features include:

  • Immutability: Once data is recorded, it cannot be changed.
  • Transparency: All transactions are visible to the network.
  • Security: Uses cryptographic techniques to secure data.

Components of a Simple Blockchain

Before diving into the code, let's understand the basic components:

  1. Block: Contains data, a timestamp, and a hash of the previous block.
  2. Chain: A series of connected blocks.
  3. Node: An individual computer within the network hosting the blockchain.

Writing the Blockchain Code

We'll create a simple blockchain with basic functionalities. Ensure you have Python installed on your machine.

Creating a Block

First, let's define our Block class:

import hashlib
import time

class Block:
    def __init__(self, index, previous_hash, data, timestamp=None):
        self.index = index
        self.previous_hash = previous_hash
        self.data = data
        self.timestamp = timestamp or time.time()
        self.hash = self.calculate_hash()

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

Building the Blockchain

Next, we create a Blockchain class to manage blocks:

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

    def create_genesis_block(self):
        # Create the first block of the blockchain
        return Block(0, "0", "Genesis Block", time.time())

    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.hash = new_block.calculate_hash()
        self.chain.append(new_block)

Testing the Blockchain

Now, let's test our basic blockchain:

def main():
    blockchain = Blockchain()

    blockchain.add_block(Block(1, "", "Block 1 Data"))
    blockchain.add_block(Block(2, "", "Block 2 Data"))

    for block in blockchain.chain:
        print(f'Index: {block.index}')
        print(f'Data: {block.data}')
        print(f'Hash: {block.hash}')
        print(f'Previous Hash: {block.previous_hash}\n')

if __name__ == "__main__":
    main()

Understanding the Flow

  • Genesis Block: The first block is manually created when the blockchain is initialized.
  • New Blocks: Each new block is linked to the previous one by storing the previous block's hash.
  • Verification: The blockchain's integrity can be verified by checking if all the previous hashes match their calculated counterparts.

Conclusion

Creating a basic blockchain helps to demystify how this powerful technology works, offering insights into its mechanisms and potential applications. Experiment with modifying the code to fully grasp its dynamics.

Learn how to build a basic blockchain in Python with easy-to-understand steps and code. Perfect for beginners and experienced developers aiming to understand the core concepts.