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

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

My First Open Source Contribution

It's my dream to contribute to open source. It is all started in 2 year of college i came to know the linux is so much awesome to work and learn about computer and know about github where you can find the open source software code. I thought, I need to learn more to contribute to the software community later i read lot of article about contributing to opensource. Every article say Learn a programming language you like. Find a project written in programming language you choose. Read it. Use it. Find any bug open a issue. Fix the issue Seems like simple as pie. I thought let's give it a try My scenario I use C to solve program in hackerrank and other coding sites and i know little bit about C++ and java at the time. when i searched for the project, all project are seems to be dinosaur huge, Finally i convinced myself and pick a project. I started reading the source code. It donot understand lot of code and i donot know where to find those answers. then frus...