As the name says chain of block
Now what is a block?
A block typically contains a
Where it is used?Now what is a block?
A block typically contains a
- cryptographic hash of the previous block,
- a timestamp
- transaction data
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 )
- 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
Post a Comment