0% found this document useful (0 votes)
4 views

Blockchain Using Python Lect_3

The document outlines the creation and functionality of a blockchain using Python, emphasizing its decentralized nature, data storage in JSON format, and security through hashing with SHA256. It details the process of mining new blocks, validating the blockchain, and creating a web application using Flask to interact with the blockchain. The provided Python code includes classes and functions for managing the blockchain, mining blocks, and checking the chain's validity.
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views

Blockchain Using Python Lect_3

The document outlines the creation and functionality of a blockchain using Python, emphasizing its decentralized nature, data storage in JSON format, and security through hashing with SHA256. It details the process of mining new blocks, validating the blockchain, and creating a web application using Flask to interact with the blockchain. The provided Python code includes classes and functions for managing the blockchain, mining blocks, and checking the chain's validity.
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 23

Blockchain in Python

• A blockchain is a time-stamped decentralized series of


fixed records that contains data of any size is controlled
by a large network of computers that are scattered
around the globe and not owned by a single
organization.

• Every block is secured and connected with each other


using hashing technology which protects it from being
tampered by an unauthorized person.
• The data will be stored in JSON format which is very
easy to implement and easy to read.
• The data is stored in a block and the block contains
multiple data. Each and every minute multiple blocks
are added and to differentiate one from the other we
will use fingerprinting.
• The fingerprinting is done by using hash and to be
particular we will use the SHA256 hashing algorithm.
Every block will contain its own hash and also the hash
of the previous function so that it cannot get tampered
with.
• This fingerprinting will be used to chain the blocks
together. Every block will be attached to the previous
block having its hash and to the next block by giving its
hash.
• The mining of the new block is done by giving
successfully finding the answer to the proof of work. To
make mining hard the proof of work must be hard
enough to get exploited.
• After mining the block successfully the block will then
be added to the chain.
• After mining several blocks the validity of the chain
must be checked in order to prevent any kind of
tampering with the blockchain.
• Then the web app will be made by using Flask and
deployed locally or publicly as per the need of the user.
# Python program to create Blockchain

# For timestamp
import datetime

# Calculating the hash in order to add digital


fingerprints to the blocks
import hashlib

# To store data in our blockchain


import JSON
# Flask is for creating the web app and
jsonify is for displaying the blockchain
from flask import Flask, jsonify
Blockchain Class

class Blockchain:

# This function is created to create the


very first block and set its hash to "0"
def __init__(self):
self.chain = []
self.create_block(proof=1,
previous_hash='0')
# Function is created to add further blocks into the
chain
def create_block(self, proof, previous_hash):
block = {'index': len(self.chain) + 1,
'timestamp’:str(datetime.datetime.no
w()),
'proof': proof,
'previous_hash': previous_hash}
self.chain.append(block)
return block
# This function is created to display
the
previous block
def print_previous_block(self):
return self.chain[-1]
# Function for proof of work and used to successfully mine the block

def proof_of_work(self, previous_proof):


new_proof = 1
check_proof = False

while check_proof is False:


hash_operation = hashlib.sha256(
str(new_proof**2 -
previous_proof**2).encode()).hexdigest()
if hash_operation[:5] == '00000':
check_proof = True
else:
new_proof += 1

return new_proof
def hash(self, block):
encoded_block = json.dumps(block,
sort_keys=True).encode()
return hashlib.sha256(encoded_block).hexdigest()
def chain_valid(self, chain):
previous_block = chain[0]
block_index = 1

while block_index < len(chain):


block = chain[block_index]
if block['previous_hash'] != self.hash(previous_block):
return False
previous_proof = previous_block['proof']
proof = block['proof']
hash_operation = hashlib.sha256(
str(proof**2 -
previous_proof**2).encode()).hexdigest()

if hash_operation[:5] != '00000':
return False
previous_block = block
block_index += 1

return True
# Creating the Web App using flask
app = Flask(__name__)

# Create the objectof the class


blockchain
blockchain = Blockchain()
# Mining a new block
@app.route('/mine_block', methods=['GET'])
def mine_block():
previous_block =
blockchain.print_previous_block()
previous_proof = previous_block['proof']
proof = blockchain.proof_of_work(previous_proof)
previous_hash = blockchain.hash(previous_block)
block = blockchain.create_block(proof,
previous_hash)
response = {'message': 'A block is MINED',
'index': block['index'],
'timestamp': block['timestamp'],
'proof': block['proof'],
'previous_hash':
block['previous_hash']}

return jsonify(response), 200


# Display blockchain in json format
@app.route('/get_chain', methods=['GET'])
def display_chain():
response = {'chain': blockchain.chain,
'length':
len(blockchain.chain)}
return jsonify(response), 200
# Check validity of blockchain
@app.route('/valid', methods=['GET'])
def valid():
valid = blockchain.chain_valid(blockchain.chain)

if valid:
response = {'message': 'The Blockchain is
valid.'}
else:
response = {'message': 'The Blockchain is not
valid.'}
return jsonify(response), 200
# Run the flask server locally
app.run(host='127.0.0.1',
port=5000)
Output (mine_block):

{ "index":2, "message":"A block is MINED",


"previous_hash":"2d83a826f87415edb31b7e12b35949b9dbf702aee7e3
83cbab119456847b957c",
"proof":533, "timestamp":"2020-06-01 22:47:59.309000" }
Output (get_chain):

{ "chain":[{"index":1, "previous_hash":"0", "proof":1,


"timestamp":"2020-06-01 22:47:05.915000"},
{"index":2,
"previous_hash":"2d83a826f87415edb31b7e12b35949b9dbf702aee7e38
3cbab119456847b957c",
"proof":533,
"timestamp":"2020-06-01 22:47:59.309000"}], "length":2 }
Output(valid):

{"message":"The Blockchain is
valid."}

You might also like