Skip to main content

BlockChain

As the name says chain of block

Now what is a block?
      A block typically contains a 
  • cryptographic hash of the previous block, 
  • a timestamp
  • transaction data 
 Where it is used?
     It is the backbone of cryptocurrency i.e it ensure the security and integrity of data. The usage doesn't stop here well blockchain are resistant to modification of the data.
so it can used in
  • Bank
  • Identity verification
  • Hospital records
  • and much more 

How it ensures security and integrity of data?
  • Block added to the chain, contain the hash ( result obtained from hash algorithm such as MD5,SHA) of the previous block so changes in one block lead to mismatch.
  • Proof of work algorithm - Adding a node in the block chain require validation whether the new block is valid or not which is done my miner if they find the valid hash they will be rewarded
How to do one?
     The most interesting part let's implement a simple blockchain in python 
Here we will we two class
First class - Block 
  • Block number
  • nonce ( like a counter, we will increment the nonce and compute hash to verify the block - Used by miners )
  • Previous hash ( hash of previous block , For first block 0x00 )
  • Next ( reference to next block )
  • Data
  • Timestamp
  • Function to find the hash of the block ( we use SHA256 as hash algorithm )
second class - Blockchain
  • block class object 
  • Difficulty  - for mining ( greater the difficulty greater the time it take to find valid hash )
  • maxNonce - maximum number for nonce in block
  • target - ( to compute a value based on difficulty which is compared with hash value )
  • Function to mine the block
  • Function to add block to the chain
import datetime
import hashlib

class Block:
 blockNo = 0
 data = None
 next = None
 nonce = 0
 previous_hash = 0x0
 timestamp = datetime.datetime.now()

 def __init__(self,data):
  self.data = data

 def hash(self):
  hashAlgorithm = hashlib.sha256()
  hashAlgorithm.update(
     str(self.blockNo).encode('utf-8')+
                   str(self.data).encode('utf-8')+
                   str(self.next).encode('utf-8')+ 
                   str(self.nonce).encode('utf-8')+
                   str(self.timestamp).encode('utf-8')+ 
                   str(self.previous_hash).encode('utf-8')
  )
  return hashAlgorithm.hexdigest()

 def __str__(self):
  return "\nBlock No: " + 
                       str(self.blockNo) +  
                       "\nHash : " + str(self.hash()) +  
                       "\nBlock Data : " + str(self.data) +  
                       "\nNounce : " + str(self.nonce) +  
                       "\nTime Stamp : " + str(self.timestamp) + 
                       "\n------------------------------------------"


class BlockChain:

 diff = 20
 maxNonce = 2**32
 target = 2**(256-diff)

 block = Block("Genesis")
 temp = head = block

 def add(self,newBlock):
  newBlock.blockNo = self.block.blockNo + 1
  newBlock.previous_hash = self.block.hash()

  self.block.next = newBlock
  self.block = self.block.next

 def mine(self,newBlock):
  for n in range(self.maxNonce):
   if (int(newBlock.hash(),16) < self.target):
    self.add(newBlock)
    print(newBlock)
    break
   else:
    newBlock.nonce += 1


blockchain = BlockChain()

for n in range(10):
 blockchain.mine(Block("Block " + str(n+1)))

while blockchain.head!=None:
 print(blockchain.head)
 blockchain.head = blockchain.head.next


Here
we call the mine script for 10 times means that we are going to develop 10 blocks each block is added to the chain only when the value computed from hash function is less than that of target otherwise nonce is incremented and process is repeated once the condition is achieved it print the block details

Advantage
Greater the chain greater the security of the chain

Disadvantage
If the chain is owned entirely by private organization then it is easy to manipulate the data

Real time applications
  • Bitcoin - Decentralized crypto currency
  • Steemit - social network based on block chain


Comments

Popular posts from this blog

Docker

Docker is used to run software packages called "containers". Containers are isolated from each other and bundle their own tools, libraries and configuration files; they can communicate with each other through well-defined channels                                                                                                --Wikipedia  I have already written a article about the containers you can check out in here https://thangaayyanar.blogspot.com/2018/06/containers.html This time, let's learn more about docker engine how we can use this. The important things we need to know in docker are Docker Image:  The container can be created with the help of Image. The Image file consists of code, libraries, environment variable...

My experience in iOS Hackathon

This is my second hackathon, my first hackathon was on machine learning if you want to check out that article by following the below link https://thangaayyanar.blogspot.com/2018/02/what-i-learned-from-machine-learning.html So let's get started First let us discuss about the idea of what we are trying to achieve in this hackathon. From the above image you can able to know that we are going to recognize text from the image and use it to do find which field it is.  we separated this idea into three modules Identify the region Recognize the text  Field classification Module I : Identify the region To identify the selected region we used Vision framework ( ML framework provided by apple to detect the object ). The vision framework give us the boundary of the text region ( i.e frame - x,y,width,height ).  Then using the above region we crop the selected region and pass it to the next module. Module II : Recognize the text To recognize the text we ...