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

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 ...

Vim - Text Editor which last for Decade

what's Vim?     Vim is a highly configurable text editor for efficiently creating and changing any kind of text. It is included as "vi" with most UNIX systems and with Apple OS X                                                                                                            ---> From Vim.org  when i first heard it, what a command line editor which is awesome and i said to myself  NO WAY, there are tons of editor which looks good and easy learn curve such as Atom,Sublime,VSCode and bunch others What makes vim special than other editors?  Different from everything you have used before ( because it has modes - insert mode,visual mode,Command mode ) Forget the mouse ( why?...

Demystify - Linux GUI

GUI In Linux GUI ( Graphics User Interface ) as everyone know about.  I am writing this article so that we can able to understand how to run GUI apps in containers but we need to understand how it works in linux. Why linux?   Most of the container we use are Linux based inorder run GUI in Linux we need know how it works.. Back in early days computer fill the entire room and if you want to access it you will be presented TTY (TeleType Machine) you can still see this screen if you press CTRL + ALT + F1 in Linux. ( To get back to GUI press CTRL + ALT + F7 ) Linux spin off 8 TTY when it boots ( we can configure more or less ) Graphics in linux is handled by bunch of little programs. They are Display manager Display manger which is the key component for graphics in which mainly graphics servers lie in linux the X.org is the defacto of Display manger. which has two components X Server  X Client Here little twist server talks to the client ( o...