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

C program jackpot

/*Program to show sum of 10 elements of array & show the average.*/ #include<stdio.h> int main () { int a[ 10 ],i,sum = 0 ; float av; printf( "enter elements of an aaray: " ); for (i = 0 ;i < 10 ;i ++ ) scanf( "%d" , & a[i]); for (i = 0 ;i < 10 ;i ++ ) sum = sum + a[i]; printf( "sum=%d" ,sum); av = sum / 10 ; printf( "average=%.2f" ,av); return 0 ; } Output: enter elements of an array : 4 4 4 4 4 4 4 4 4 4 sum = 40 average = 4.00 /*Program to find the maximum no. in an array.*/ #include<stdio.h> void main () { int a[ 5 ],max,i; printf( "enter element for the array: " ); for (i = 0 ;i < 5 ;i ++ ) scanf( "%d" , & a[i]); max = a[ 0 ]; for (i = 1 ;i < 5 ;i ++ ) { if (max < a[i]) max = a[i]; } printf( "maximum no= %d" ,max); } Output: enter elements for array : 5 4 7 1 2 maximum no = 7 /*Swapp

Newsboat RSS Reader

Let me tell what is rss reader then i will explain about newsboat,. RSS stands for Rich Site Summary. Simply it is way to subscribe to webpages and when new article is published you can see through the feeds. you get the idea Newsboat is a terminal rss reader which is simple, easy to use and highly customizable how to find rss feed link ?                                   simple trick that i used to find rss feeds in a website check for rss image like above [OR] Right click the website -> view page souce and search for rss copy the link and paste it in urls file in the .config/newsboat/urls (for linux and mac) RSS feeds from twitter: https://twitrss.me/twitter_user_to_rss/?user=<USERNAME> https://www.twitrss.me/twitter_search_to_rss/?term=<SEARCH TERM> example: https://twitrss.me/twitter_user_to_rss/?user=Hytale https://www.twitrss.me/twitter_search_to_rss/?term=Hytale RSS feeds from youtube: https://www.youtube.com/feeds/videos.xml?channel_id

Ecosia

ECOSIA - A Green search engine “ Ecosia donates 80% profits to planting trees” Site: www.ecosia.org Lauched on 7 th December 2009 and created by Christian Kroll available in more than 26 language. It is located in Berlin, Germany.It is also called as CO2-neutral company.Ecosia has donated to different tree-planting programs. Until December 2010 Ecosia’s donations went to a program by WWF Germany that protected the Juruena-National park in the Amazonas. In order to make sure the protection was kept up, the program also drew up and financed plans with timber companies and the  local communities. According to B-labs, as of January 2015, "In donating 80 percent of its ad revenue, the search engine has raised over $1.5 million for rainforest protection since its founding in December 2009." According to Ecosia, by 2015, the search engine had almost 2.5 million active users, and searches through it had resulted in more than 2 million trees being planted.Since October 201